Javaの勉強(3)
『String.equals( )』と『String==String』の違い二回目
(1)Javaの型には基本データ型と参照型の2種類がある。
基本データ型・・・・boolean、byte、short、int、long、char、float、double
参照型・・・・・・・・・クラス型、インタフェース型、配列型
まず、Stringは参照型(クラス型)である。
(2)Stringクラスでは==とequalsで違いがある。
== は同じStringオブジェクトを参照しているかどうか
equals は同じ文字列を保持しているかどうか
つまり、equalsはどのような文字列を保持しているのかを見るということ。
では、==はどういう意味なのか
String hoge = "test";
String fuga = "test";
この2つのコード、一見違うオブジェクトを生成してるように見える。
Stringは参照型変数なのだから、
hoge → Stringオブジェクト "test"
fuga → Stringオブジェクト "test"
と、なるはず・・・(→は参照を表す)
しかし、ここで重要なのが次の項目
(3)同じ文字リテラルの場合にStringオブジェクトがどのように参照するか。
これである。
同じ文字リテラルの場合にはStringオブジェクトは1つしか生成されない。
そして、その1つのオブジェクトを参照するのである。
hoge → Stringオブジェクト "test"
fuga →→↑
ということで、この場合hogeとfugaは同じオブジェクトを参照していることになる。
つまりhoge==fugaはtrueとなる。
一方、String piyo = new String("test");
はnewを使って新しくオブジェクトを生成している。
だからhoge、fugaとは別物のオブジェクトとなる。
つまりfuga==piyoはfalseとなる。
Javaの勉強(2)
『String.equals( )』と『String==String』の違い
以下のように宣言した場合を考える。
String hoge = "test";
String fuga = "test";
String piyo = new String("test");
この場合以下の結果は?
hoge == fuga true
hoge == piyo false
hoge.equals(fuga); true
hoge.eauals(piyo); true
正解は反転ででます。
さて、なぜこのようになるのか・・・
それには以下の内容を理解する必要がある。
(1)Javaの型には基本データ型と参照型の2種類がある。
(2)Stringクラスでは==とequalsで違いがある。
(3)同じ文字リテラルの場合にStringオブジェクトがどのように参照するか。
ということで次はこの各項目について詳しく調べてみようと思う。
過去をふりかえる(1) 【5月】OracleMasterBronze
5月にOracleMasterBronze10gの資格を取得しました。
OracleとはOracle社が販売している
RDBMS(リレーショナルデータベースマネージメントシステム)のことで、
世界的にも大きなシェアを占めています。
OracleMasterとはそのOralce社が実施する認定資格のことを指します。
OracleMasterの資格には
Platinum(プラチナ)・Gold(ゴールド)・Silver(シルバー)・Bronze(ブロンズ)の4つがあり、
今回取得したのはそのうちの一番初級のBronzeです。
この資格はグローバルな資格ではなく、シルバー以降が世界的にも認められる資格となる。
Bronzeは『DBA』・『SQL』の2つの試験を受験し、一定以上の点数を取ることで合格となります。
最近DBAの合格ボーダーが下がったらしく、下がる前に取得した自分としてはちょっと驚きました。
私は資格取得というのは、自分の勉強のための一手段にすぎないという考えなんですが、
少し資格の価値が下がったみたいで残念でした^^;
参考までに、私の勉強方法は黒本とiStudyをひたすらやりました。
黒本を通勤時間に読み、家ではiStudyをやって間違った箇所を調べて覚える・・・
これを毎日繰り返して1ヶ月程度でとりました。
iStudyが8割くらいとれるようになれば合格ラインには届く力はあると思います。
ただ、この試験受験料が高い!!
1科目15,750 円でBronze取得のためには2科目とらないといけないので31,500円!!
私は会社から戻ってきたのでよかったが、趣味で取るには結構大きい額だと思う。
現在は、Javaの勉強をやりながらSilverを取得するために勉強中です。
できればGoldまでは取りたいと思っている。
けど、バージョンアップとか頻繁にしてるみたいでそのたびに移行試験を受けないといけないらしく、
結構大変・・・
でも、データベースって仕事ですごく使うのでたくさん勉強したいと思う。
Javaの勉強(1)
会社からの命令でJavaの試験を受けることになったので、覚書をする。
★クラスに使える修飾子
・public・・・・・・どこからでもアクセスできる
・abstract・・・・抽象クラス
・final・・・・・・・サブクラスを作れない
★メンバに使える修飾子
・public・・・・・・・・どこからでもアクセスできる
・protected・・・・・同一パッケージ内のクラス、派生したクラスからアクセス可
・指定なし・・・・・・同一パッケージのクラスのみアクセス可
・private・・・・・・・そのクラスの内部からのみアクセス可
★Javaプログラムの構成
パッケージ宣言
インポート宣言
クラスの定義
この順番以外はコンパイルエラー。
★標準ライブラリ
java.langパッケージ 自動的にインポートされる。
★変数の初期化
メンバ変数は初期化される。
ローカル変数は初期化されない。(ローカル変数:メソッドやコードブロックで宣言された変数)
★boolean型について
0が偽としては解釈されない。(C言語とは違う)
while(0)とかはコンパイルエラー
★length
配列の長さは・・・・・array.length
Stringの長さは・・・・str.length()
★識別子
・英字と_(アンダスコア)と$(ドルマーク)
・2文字目からは数字も可
★JARファイル(JavaARchive)
多くのクラスやデータ資源を保存
☆調べて、理解すること☆
・staticな変数、staticなメソッドのふるまい
・オブジェクト間の代入 obj1=obj2 みたいな代入をしたときに各メンバ変数はどうなるか
・継承したクラスのオブジェクトを生成 Animal animal = new Human(); みたいなの
・例外処理について
・スレッドについて
・Java.utilについて HashMapなど・・・
って結構多いな・・・(汗
自己紹介
とりあえず、自己紹介を・・・
namachu(生中)です。よろしくですm(__)m
IDからもわかるように、ビール大好きの20代プログラマです。
今年から都内の某中小企業で、ソフトウェア開発をやっています。
プログラミングは大学時代にCを少々やっていたので、
プログラミングに困ることは今のところはあまりありません。
大学時代に『初級シスアド』・『基本情報処理技術者』の資格を取得した以外は、
特に自分の誇りに思えることはありません(泣
ようやく仕事にも慣れ始めてきたので、
備忘録という意味もこめてブログをつけようと思った次第である。
軽くこの半年を振り返ってみると・・・
【4月】
関東圏に引越しをして、プログラマとして飯を食っていこうと決意。
研修でVisualBasicを少々学ぶ。
【5月】
DB(データベース)の勉強のために、Oracleの勉強を始める。
勉強の甲斐あって、OracleBronze10gを取得ヽ(゚∀゚)ノ
少しだけだが給料が上がる。
【6月】
研修の一貫として、グループでシステムを作る。
そのうちの一人と意見が対立して、多少気まずい雰囲気に・・・・orz
【7月】
オブジェクト指向の勉強としてJavaを勉強する。
そのあとJSPで簡単なWeb上のシステムをグループで作る。
もう衝突したくないので、とりあえず気楽にやる。
【8月】
いよいよ、会社のプロジェクトに参加をする。
10年前に作ったシステムの修正をまかされる。
すごく大変でかなり苦労するが、なんとか修正完了。
【9月】
別のプロジェクトに移動。
今度はC#でシステムを作ることに、
新人数人で帳票を作る作業をする。
【10月】
引き続き帳票を作る作業。
テストの重大さと、いかに後々の人が読みやすいソースを書くかを勉強。
これは永遠の課題かもしれない。
ソフトウェア開発技術者の試験を受けるも撃沈・・・
次回は必ず・・・
【11月】
帳票が一応全部仕上がって、今度はソースの修正とテストとデバッグをする。
他の人が作ったソースを見て愕然・・・・(´Д`)
そして現在に至る・・・・
今はJavaの勉強中!勉強が面白いと感じるだけ幸せと思わないとな(´・∀・`)