黑马程序员技术交流社区
标题:
求高手解答
[打印本页]
作者:
戎石锁
时间:
2012-8-16 16:57
标题:
求高手解答
class Demo
{
public static void main(String[] args)
{
Integer i=300;
Integer i=300
System.out.println(i==i);//居然是false。,有意思
}
}
/*
浏览别的JAVA论坛时,发现了这样一个问题,求解
1,这个代码,我编译是会出错,但是好多人都编译通过了,不知道为什么?
不要问代码是否写错了,代码是我复制过来的,而且那个论坛还有回答,就没有人回答这个为什么会编译通过。
2,如果编译通过,i==i真的是false吗,为什么?
*/
作者:
黑马-郑鹏
时间:
2012-8-16 17:53
首先:
class Demo
{
public static void main(String[] args)
{
Integer i=300;
Integer i=300 //
你这代码这里没有分号,指定编译不过
System.out.println(i==i);//居然是false。,有意思
}
}
其次,这里定义的两个变量的名字都是i,应该也编译不过呀。
Demo.java:6: 已在 main(java.lang.String[]) 中定义 i
Integer i=300;
^
我不知道别人是怎么编译通过的,我也感觉挺奇怪的。
作者:
戎石锁
时间:
2012-8-16 18:13
黑马-郑鹏 发表于 2012-8-16 17:53
首先:
class Demo
{
我也正郁闷编译这个问题呢,哎哎哎
作者:
黑马_许芸
时间:
2012-8-16 18:17
先把楼上的问题解决了。然后呢,你再把这两个整数的值设置在-128——127的范围内,就可以得到true,超出这个范围就是false。这是因为,Integer类有一个缓存,它会缓存介于-128~127之间的整数。超出这个范围的整数不在缓存中,自然每次都会在堆中生成新的对象,用==来判断就是false了。这个问题不重要,没有什么好纠结的,你都用equels不就好了。
作者:
黑马-郑鹏
时间:
2012-8-16 18:25
那我们怎么连编译的通不过呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2