package com.cc.demo1;
public class IntegerTest {
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
Integer e = 321;
Integer f = 321;
Long g = 3L;
Long h = 2L;
System.out.println(c == d); //true
System.out.println(e == f); //false
//存在a+b数值表达式,比较的是数值
System.out.println(c == (a + b)); //true
//equals比较的是数值
System.out.println(c.equals(a + b));//true
//存在a+b数值表达式,比较的是数值
System.out.println(g == (a + b));//true
// Long的equals()先判断传递进来的是不是Long类型,而a+b自动装箱的是Integer类型
System.out.println(g.equals(a + b));//false
//从下面的两个比较中,可以看出一个Integer和Long想加,结果是Long类型
System.out.println(g.equals(a + h));//true
System.out.println(c.equals(a + h));//false
}
}
確かに多くの人がバッファプール整数がJavaであることを知って、キャッシュのサイズは次のとおりです。127 -128。
ここについて話をします:
** == **の使用:
- 比較が整数変数である場合は、デフォルト値は、アドレス比較です。
- -128から127までのJavaの整数バッファプールを維持します。
- 操作(例えば、+ b)は比較一方式場合、比較は、特定の値です。
使用すると、()と等しい場合に:
- 等号()と比較してどうか整数またはロングはデフォルト値です。
- ロングの等号()メソッドは、デフォルトのJDKの実装は:ロングタイプかどうかを決定します
ソースコードのequals()メソッドでロング見て:
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
ロングは、第1のタイプではないロング、falseを返すかどうかを判断します。
equalsメソッドでは、ソースIntegeを見てください:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
これは、最初のInteger型かどうかを判断します。
単純にinstanceofは見てください。
instanceofのジャワ、バイナリ演算子(オペレータ)のPHP、およびものの==、>、<同じタイプです。それは文字で作られているので、それはまた、Javaは、キーワードを予約されています。その役割は、左と右のクラスのインスタンスのオブジェクトは、ブールデータ型を返すかどうかを判断することです。サブクラスの実装のインスタンスは、親クラスを継承するかどうかを決定するために使用することができます。C#は、オペレータと同等です。Javaのinstanceofは、オブジェクトが特定のクラスまたはそのサブクラスのインスタンスであるか否か、ブール値に戻ることによって示されています。