wataruの部屋

20代駆け出しシステムエンジニア 低学歴な人生を歩んで来たため仕事させてくれる社会に感謝しています。 ブログの内容は映画やプログラミングに関することなど...

3章<演算子 条件式>

まずはポイント

・算術演算子 左から計算する()がある場合括弧が優先

・代入演算子 代入するよ

・関係演算子 boolean値で返すよ 

・論理演算子 1つのものと二つのもので評価の仕方が変わる

・基本データ型の比較 参照型の比較は同値性と同一性

・Stringクラスは文字列を参照先を保持するよ

・eqals()メソッドはobjectクラスとStringクラスで違う

 前者は同一性で後者は同値性を比較するよ

・Stringクラスのnewキーワードは新しい文字列を生成しその参照先を保持するよ

 newキーワードを使わない場合、既存の文字列を参照する。

・If文やwhile等の条件式の()には必ずboolean値になるようにしよう

 直接、true,falseを記入しても機能するよ

三項演算子は <条件式> ? <trueのときの値> : <falseのときの値>

・switch文で扱えるデータ型は

{byte char short int enum String}

・swich文にbreakをつけないと次の条件も判定する

・defalut文は末尾におく必要がない breakがないdefalut文はcase文と同じ役割をする

 

◆算術演算子

[+,-,*,/,&]とか数学と同様な演算順序、括弧がある場合は括弧の中の式が優先される

優先度が同じの

場合左から処理されていく

 

◆代入演算子

 =とか、a=1で変数aに1が代入される

 +=や-=のように組み合わせて使用することもある

◆関係演算子

 「a==b」→aとbの値が等しいならtrue「a>=b」

みたいなやつ

◆論理演算子

①「条件1 | 条件2」」

② 「条件1 || 条件2」

③「条件1& 条件2」

④「条件1 && 条件2」

注意ポイントが演算子が一つか二つで少し変わります

演算子が一つのものは条件1が真、偽問わず 条件2を評価します。

③の場合、条件1がfalseであっても、条件2は評価します。

④の場合、条件1がfalseの時点で条件2は評価されません

ここが重要ポイント

①と②も同様です。

②の場合、条件1が真の場合 条件2は評価されません

 

◆Sringクラスは文字列の参照先をもつ

 String hoge = "aaa";

メモリ上にaaaが生成され、ここの参照先をhoge変数がもつことになる。

 

◆eqals()メソッド

objectクラスとStringクラスにはeqals()メソッドが存在する

objectクラスの場合、参照先が同じであるかどうかを評価します(同一性)

Stringクラスの場合、同じ値であるかどうかを評価します(同値性)

 

同一性であるかどうかは(==)で確認することができる。

同値性であるかはStringクラスのeqals()メソッドで確認できる。

 

例 String x = "aaa";

       String y = "aaa;

   

    (x == y)するとこの式はfalseを返します。なぜなら変数xと変数yはそれぞれの

文字列aaaの参照先を保持し、(==)にとって同一性を評価してるから

 

       String x = "aaa";

       String y = "aaa;

 

        x,eqals(y)と評価するとtrueが返される変数xと変数yは同じ値を保持しているから

 

 

String str1 = "java"; //新しくオブジェクトが生成される。
String str2= "java"; // 上記で宣言されたオブジェクトを参照する
String str3 = new String("java"); //オブジェクトが新たに生成される


if(str1 == str2) //trueが返ります 同一性を担保している

if(str1 == str3) //falseが返る 別のオブジェトを指しているので 同一性ではfalseになる

if(str1.eqals(str3)) //trueが返る Stringクラスのeqals();メソッドは同値性を担保するようにオーバライドされているから

 

◆Stringクラスのnewキーワードは新しい文字列を生成しその参照先を保持します

 newキーワードを使わない場合、既存の文字列を参照する。

 

String hoge = new String("aaa");

String hoge2 = new String("aaa");

 

それぞれのメモリ上にaaaを新しく作成します。

newを指定しないで作成すれば既存の文字列aaaの参照先を保持します。

 

 Stringのインスタンスは文字列リテラルを作成するだけで生成される

コンスタントプールという仕組みがあるため

 

同じ文字列リテラルは定数値としてインスタンスとは異なる場所に生成され

そこへの参照が変数に代入される。

 

◆If文やwhile等の条件式の()には必ずboolean値になるようしなければならない

 

   If(a = 1){ // 処理 }

この分はエラーになる条件式が代入になっているから

 

while(true){ // }

この式は実行される 条件式がboolean値になっているから

 

if(a = true){ // }

この式も処理は実行される

 

※直接、true,falseを記入しても機能するよ

 

・switch文で扱えるデータ型

・byte

・char

・short

・int

enum

・String (java7から)

 

・swich文にbreakをつけないと次の条件も判定します

 

 swich(i)

 case 1:

               処理

              break;

   case 2:

               処理

   case 3:

              処理

              break;

 

このケースの場合、case2にあとにcase3まで内容問わず実行されます。

 

三項演算子は a ?  b : c  aがtrueならbを実行 ,aがfalseならcを実行 

 書式: <条件式> ? <trueのときの値> : <falseのときの値>

 

◆defalut文は末尾におく必要がない breakがないdefalut文はcase文と同じ役割をする

 case 1:

               処理

              break;

   defalut: //別にここでもいい。

 

   case 2:

               処理