a=b b=c 就a=c? Integer a=new Integer(3);Integer b=new Integer(3);System.out.println(a==3);System.out.println(b==3);System.out.println(a==b); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 truetruetruewhen -128 <= i <=127 --> i == new Integer(i) ? true : false;//always true 因为Integer是int的包装类 JDK自从1.5(5.0)版本以后,就引入了自动拆装箱的语法,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行 所以判断a==3时候 a被自动转换为int型 而a==b的时候比较的是两个对象 两个不同的对象的地址肯定不同 System.out.println(a==b); // falseI was wrong... 有错System.out.println(a==3);System.out.println(b==3); 有错System.out.println(a==3);System.out.println(b==3); 我刚测试一下,不错没问题,三个都是TRUE,TRUE,TRUE 我觉得应该是true true false他们的产生应该和内存中的堆栈有关系理论上因该是这样的。。但不知道为何程序运行却都是truetruetrue Java中关于Integer有几处需要注意:1.自动装箱拆箱 2.缓存 Integer a=new Integer(3);Integer b=new Integer(3);Integer c=4,d=4;//自动装箱,等效于c=Integer.valueOf(4),d=Integer.valueOf(4);System.out.println(a==3);//自动拆箱System.out.println(b==3);System.out.println(a==b);//==与+是Java中唯一被重载的两个运算符,两个对象进行比较时会比较内存地址System.out.println(c==d);//因为-128~127之间的整数被缓存,所以他们指向同一个地址 结果:truetruefalsetrue truetruefalseLS分析的很详细 true true false, 执行结果应该是a==3 比较的是值,因此结果为trueb==3 同理,因此结果也为true而a,b是实例化的两个对象,a==b,比较的首地址、值和类型,因此结果为false 对自动装箱拆箱、缓存是啥意思不是很了解,按我理解为System.out.println(a==3);System.out.println(b==3);肯定没问题。System.out.println(a==b);a,b都是对象,所指的地址不同,所以为false true;true;false;a==3,b==3肯定是对的,而a==b就不对了,a和b是两个不同的对象,在内存中的地址是不同的,所以a是不等于b的! 9l正解:package com.jsu.test;public class Test { /** * @param args */ public static void main(String[] args) { Integer x=new Integer(1); Integer y=new Integer(1); Integer a = 3; Integer b = 3; Integer c = 10, d = 10; System.out.println("x==y?:"+(x==y)); System.out.println(a == 3); System.out.println(b == 3); System.out.println("a==b?:"+(a==b)); System.out.println("c==d?:"+(c==d)); }} a == 3 比较的是值a == b 比较的是对象。对象地址不同 true,true,falsea==3呢会跟值比较,因为3是常量,放在常量池里a==b呢这是对象之间的比较 true,true,true.自动装箱时对值从-128-127之的,它们被装箱为对象后,会在内存中被重用。 Integer a=new Integer(3);Integer b=new Integer(3);Integer c=4,d=4;//自动装箱,等效于c=Integer.valueOf(4),d=Integer.valueOf(4);System.out.println(a==3);//自动拆箱System.out.println(b==3);System.out.println(a==b);//==与+是Java中唯一被重载的两个运算符,两个对象进行比较时会比较内存地址System.out.println(c==d);//因为-128~127之间的整数被缓存,所以他们指向同一个地址truetruefalsetrue高人啊。。 Integer a=new Integer(3);integer b=3;这两者有什么不同呢 Integer i=100; Integer j=100; System.out.println(i ==j ); //(1) true System.out.println(i.intValue()==j.intValue()); //(1-1) true Integer i1=200; Integer j1=200; System.out.println(i ==j); //(2) false System.out.println(i.intValue() ==j.intValue() ); //(2) true Integer a=200; Integer b=200; int c=200; int d=200; System.out.println("a==c "+(a==c)); //a==c true System.out.println("b==c "+(b==c)); //b==c true System.out.println("a==b "+(a==b)); //a==b false System.out.println("c==d "+(c==d)); //c==d true Integer a1=new Integer(3); Integer b1=new Integer(3); Integer c1=4,d1=4;//自动装箱,等效于c=Integer.valueOf(4),d=Integer.valueOf(4); System.out.println(a1==3);//自动拆箱 System.out.println(b1==3); System.out.println(a1==b1);//==与+是Java中唯一被重载的两个运算符,两个对象进行比较时会比较内存地址 System.out.println(c1==d1);//因为-128~127之间的整数被缓存,所以他们指向同一个地址truetruetruetruea==c trueb==c truea==b falsec==d truetruetruefalsetrue Integer c2=400,d2=400; System.out.println(c2==d2); //false 上边的人给的答案都是windows下的jdk编译结果。如果在Linux上,这段代码编译都无法通过。拿一个对象与一个内置类型比较是不可接受的。不信的人可以试试既然java跨平台,那么写的代码就要注意跨平台。 来csdn四年了!这个问题可说月月见 truetrueflase前俩个比较的是值,第三个比较的是IP地址,第三个事对象的比较,应该用if(a.equals("b"))对对象进行比较,刚才有一楼说他测试过时true把我下一跳...我也跟着测试了一下,结果是:truetrueflase 请教,如何指定集合的排序方法? Graphics中drawString方法? HttpUrlConnection的getInputStream 和getOutputStream是什么意思 JAVA <> SQL <> XML 急!!!在线等待,关于文件的问题 求教虚线 的绘制方法(20) java中的视频采集(高手请进)? 初级问题!我是新手, 如何用java编写一个NT平台下的标准服务? 求大神指教,我红字标注的那里为什么报错了~谢谢各位~ 求最大公因子的问题 使用JButton 的setEnabled(false)后,按钮变灰,但是单击后仍然会触发事件
true
true
when -128 <= i <=127 --> i == new Integer(i) ? true : false;//always true
所以判断a==3时候 a被自动转换为int型
而a==b的时候比较的是两个对象 两个不同的对象的地址肯定不同
I was wrong...
System.out.println(a==3);
System.out.println(b==3);
System.out.println(a==3);
System.out.println(b==3);
true
true
false他们的产生应该和
内存中的堆栈有关系
理论上因该是这样的。。
但不知道为何程序运行却都是
true
true
true
Integer a=new Integer(3);
Integer b=new Integer(3);
Integer c=4,d=4;//自动装箱,等效于c=Integer.valueOf(4),d=Integer.valueOf(4);System.out.println(a==3);//自动拆箱
System.out.println(b==3);
System.out.println(a==b);//==与+是Java中唯一被重载的两个运算符,两个对象进行比较时会比较内存地址
System.out.println(c==d);//因为-128~127之间的整数被缓存,所以他们指向同一个地址
结果:
true
true
false
true
true
false
LS分析的很详细
a==3 比较的是值,因此结果为true
b==3 同理,因此结果也为true
而a,b是实例化的两个对象,a==b,比较的首地址、值和类型,因此结果为false
System.out.println(a==3);
System.out.println(b==3);
肯定没问题。
System.out.println(a==b);
a,b都是对象,所指的地址不同,所以为false
true;
false;
a==3,b==3肯定是对的,而a==b就不对了,a和b是两个不同的对象,在内存中的地址是不同的,所以a是不等于b的!
* @param args
*/
public static void main(String[] args) { Integer x=new Integer(1);
Integer y=new Integer(1);
Integer a = 3;
Integer b = 3;
Integer c = 10, d = 10;
System.out.println("x==y?:"+(x==y));
System.out.println(a == 3);
System.out.println(b == 3);
System.out.println("a==b?:"+(a==b));
System.out.println("c==d?:"+(c==d)); }}
a == b 比较的是对象。对象地址不同
a==3呢会跟值比较,因为3是常量,放在常量池里
a==b呢这是对象之间的比较
Integer a=new Integer(3);
Integer b=new Integer(3);
Integer c=4,d=4;//自动装箱,等效于c=Integer.valueOf(4),d=Integer.valueOf(4);System.out.println(a==3);//自动拆箱
System.out.println(b==3);
System.out.println(a==b);//==与+是Java中唯一被重载的两个运算符,两个对象进行比较时会比较内存地址
System.out.println(c==d);//因为-128~127之间的整数被缓存,所以他们指向同一个地址
true
true
false
true
高人啊。。
integer b=3;
这两者有什么不同呢
Integer j=100;
System.out.println(i ==j ); //(1) true
System.out.println(i.intValue()==j.intValue()); //(1-1) true
Integer i1=200;
Integer j1=200;
System.out.println(i ==j); //(2) false
System.out.println(i.intValue() ==j.intValue() ); //(2) true
Integer a=200;
Integer b=200;
int c=200;
int d=200;
System.out.println("a==c "+(a==c)); //a==c true
System.out.println("b==c "+(b==c)); //b==c true
System.out.println("a==b "+(a==b)); //a==b false
System.out.println("c==d "+(c==d)); //c==d true
Integer a1=new Integer(3);
Integer b1=new Integer(3);
Integer c1=4,d1=4;//自动装箱,等效于c=Integer.valueOf(4),d=Integer.valueOf(4); System.out.println(a1==3);//自动拆箱
System.out.println(b1==3);
System.out.println(a1==b1);//==与+是Java中唯一被重载的两个运算符,两个对象进行比较时会比较内存地址
System.out.println(c1==d1);//因为-128~127之间的整数被缓存,所以他们指向同一个地址true
true
true
true
a==c true
b==c true
a==b false
c==d true
true
true
false
true
System.out.println(c2==d2); //false
上边的人给的答案都是windows下的jdk编译结果。如果在Linux上,这段代码编译都无法通过。拿一个对象与一个内置类型比较是不可接受的。不信的人可以试试既然java跨平台,那么写的代码就要注意跨平台。
true
flase
前俩个比较的是值,第三个比较的是IP地址,第三个事对象的比较,应该用if(a.equals("b"))对对象进行比较,刚才有一楼说他测试过时true把我下一跳...我也跟着测试了一下,
结果是:
true
true
flase