0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【演算子と判定構造の使用①】論理演算子(&&、||)、同一性(==)、同値性(equals)

Last updated at Posted at 2024-06-02

はじめに

オラクル認定資格教科書 Javaプログラマ Silver SE8
第一章 Javaの基本 
第二章 Javaのデータ型の操作
第三章 演算子と判定構造の使用← イマココ!!
第四章 配列の作成と使用
第五章 ループ構造の使用
第六章 メソッドとカプセル化の操作
第七章 継承の操作
第八章 例外の処理
第九章 Java APIの主要なクラスの操作

倫理演算子について

演算子 使用例 意味
& a & b aとbの両方がtrueであればtrue
&& a && b aとbの両方がtrueであればtrue
I a I b aもしくはbのどちらかがtrueであればtrue
II a II b aもしくはbのどちらかがtrueであればtrue
! a! trueであればfalse、falseであればtrue

& と &&、| と ||の違い

&&&||| の違いは、左オペランドの結果で右オペランドを評価するか、評価しないかである。
&| は左オペランドの結果にかかわらず、右オペランドの評価も行う。
一方で、&&|| は「ショートサーキット演算子」とも呼ばれ、左オペランドで結果がわかれば、右オペランドの評価は行わない。


int a = 10;
int b = 10;
if (10 < a && 10 < ++b) {
//左オペランドでfalseが確定するため、右オペランドは実行されず、bは10のままである
  a++;
}
System.out.println(a + b);
//20

同一性( == )

完全に同じであるかを評価する。
同じ値でも、参照先が違っていればfalseとなる。

public class Sample {
  private int num;
  public Sample(int num) {
    this.num = num;
  }
}  
------------------------------
public class Main {
  public static void main(String[] args) {
    Sample a = new Sample(10);
    Sample b = new Sample(10);
    System.out.println(a == b);//false
    // aとbの値は共に10ではあるが、参照先のインスタンスが異なるため、同一性が認められない
}

同値性(equals)

同値性を確認する場合は、Stringクラスのequalsメソッドを利用する。
大元であるObjectクラスに定義されているequalsメソッドは同一性を確認するため要注意。
Objectクラスのequalsメソッドで同値性を確認する場合は、オーバーロードして値を比較するよう実装する必要がある。

//Objectクラスでの同一性を確認する実装のequalsメソッド
public boolean equals(Object obj) {
  return (this == obj)
}
----------------------------------------------
//オーバーライドして、同値性を確認するよう実装する
public boolean equals(Object obj) {
  if (obj == null) {
    return false;
  }
  if (obj instanceof Sample) {
    Sample s = (Sample) obj;
    return s.num == this.num;//num(値)だけ比較するよう指定
  }
  return false;
}

----------------------------------------------
//Stringクラスのequalsメソッドを使用
public static void main(String[] args) {
  String a = new String("Sample");
  String b = "Sample";
  System.out.println(a.equals(b));//true
}

リンク集

【Javaの基本①】クラスの構造
【Javaの基本②】パッケージとインポート
【継承の操作②】インターフェース
【Javaのデータ型の操作①】プリミティブ型のデータ・参照型
【演算子と判定構造の使用①】論理演算子(&&、||)、同一性(==)、同値性(equals)
【演算子と判定構造の使用②】分岐処理(if、swich)
【配列の作成と使用】
【ループ構造の使用】while文、do-while文、for文、拡張for文
【メソッドとカプセル化の操作①】メソッドの概要
【メソッドとカプセル化の操作②】オーバーロード、コンストラクタ
【継承の操作①】クラスの継承
【例外の処理】
【Java APIの主要なクラスの操作】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?