==とequalsメソッドの違いとIntegerとStringの応用

1818 ワード

==とequalsメソッドの違いとIntegerとStringの応用
==2つのオブジェクトのアドレスメモリアドレスを比較し、equalsは2つのオブジェクトの値を比較します.たとえばStringのequals比較手法では,==を呼び出して同一か否かを判断し,次に対象valueのchar配列が同一か否かを判断する.提案:2つのオブジェクトが同じかどうかを比較し、Objects.equalsメソッドを統一的に使用します.アリ規約には推奨があります.
Integerとintの==操作
Integerとintの==判定は主にアドレスの判定である.例は次のとおりです.
int i = 100;
Integer i1 = 100; 
System.out.println(i==i1);//true
Integer i2 = 100;
System.out.println(i1==i2);//true
Integer i3 = new Integer(100);
System.out.println(i==i3);//true
System.out.println(i1==i3);//false		
Integer i4 = 300;
Integer i5 = 300;
System.out.println(i4==i5);//false
Integer i6 = new Integer(300);
System.out.println(i4==i6);//false
int i6=300;
System.out.println(i5==i6);///true

理由説明:1自動梱包とIntegerオブジェクトキャッシュ配列:int i=100、自動梱包、すなわちInteger i=Integer.valueOf(100)、またIntegerにはキャッシュ配列,すなわち−128<=value<=127があり,いずれもキャッシュ配列からIntegerオブジェクトを取得する.したがってii 1,i 1 i 2はtrueであるが,new Integer法により生成されたオブジェクトがfalseである場合,newの本意は新しいオブジェクトを創出することであるため,i 3 i 1はfalseであり,ii 3の原因はintがIntegerと比較するとIntegerが解体しvalueの大きさを比較するため同じである.2 i 4 i 6はいずれもIntegerオブジェクトであり、valueがキャッシュの最大値を超えているためnewのオブジェクトであるため、Integerオブジェクト比較時はfalse 3 i 5==i 6 i 5はintであるため、i 6はボックスを外し、メモリアドレスの比較ではなく数値の比較を行う.4したがって2つのIntegerオブジェクトのサイズが同じかどうかを判断するにはInteger.intValue()を使用し、1つのIntegerとintでサイズ判断を行う場合はInteger.intValue()を使用する必要はありません.Integerはintと比較して自動的にボックスを外すか、Integerのequalsメソッドを直接使用するためです
Stringの==とequals
String str = "abc";
String str1 = "abc";
System.out.println(str==str1);//true
String str2 = new String("abc");
System.out.println(str==str2);//false
String str3 = new String("abc");
System.out.println(str2==str3);//false

Stringにも文字列定数プールがあるため、str=str 1を通過すると、両方とも定数プールからオブジェクトを直接取得します.ただしnewでは、文字列定数プールに値があるかどうかにかかわらず、オブジェクトが新規作成され、その値が格納されます.