Integer i1= new Integer(9);
Integer i2= new Integer(9);
if(i1==i2){
System.out.println("true");
}else{
System.out.println("false");
}
int i3=9;
int i4=9;
if(i3==i4){
System.out.println("true");
}else{
System.out.println("false");
}
if(i3==i2){
System.out.println("true");
}else{
System.out.println("false");
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中首先if-else打印为false,为什么?.但是当第二次返回true而第三次有true时.我认为包装类(如double,boolean,char)不能比较True?
当==用于比较对象的引用时,仅当两个引用指向同一对象时,它才返回true.
在第一种情况下,您有两个不同的对象.
在第二种情况下,您不是比较对象,而是比较基本类型.
在第三种情况下,Integer对象被拆箱到其原始int值以与原始值进行比较,因此比较两个原始值.
您永远不应该使用==比较对象,枚举除外.一直用.equals().
首先,if-else打印为false.为什么?
==检查两个引用是否引用同一个对象,在这种情况下它们不是那样==检查false.你需要使用Integer.equals(),而不是==:
if (i1.equals(i2){
System.out.println("true");
}else{
System.out.println("false");
}
Run Code Online (Sandbox Code Playgroud)
第二次回归真实
==用于基元是正确的:int是原始的.
第三个是真的
正如JB Nizet 所指出的那样,它i2是未装箱的,int它使if条件成为两个int基元之间的检查.
| 归档时间: |
|
| 查看次数: |
2246 次 |
| 最近记录: |