论坛首页 Java企业应用论坛

Java容易搞错的知识点-觉得基础扎实的来看

浏览 62061 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-03-07  
akunamotata 写道
引用
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。


求解

这个是java在运行时期才做的计算,是放入堆里面的,所以==是不一样的 ,和a == (“hello” + “world”)是不一样的,后者是在编译时期做了运算,结果放入常量池,相当于a==a这样的!
0 请登录后投票
   发表时间:2011-03-07  
还是能查漏补缺,
lz辛苦了。。。。
0 请登录后投票
   发表时间:2011-03-07  
akunamotata 写道
引用
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。


求解

这是因为String类型在相加的时候会另外产生一个新的对象。
0 请登录后投票
   发表时间:2011-03-07  
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。
x和y是变量,所以不等,如果改成
final String x = "hello";
final String y = "world";
把x,y变成常量
(a == (x + y))就会返回true
0 请登录后投票
   发表时间:2011-03-07  
很多人 对static 这样的修饰符掌握的不好,包括我在内
0 请登录后投票
   发表时间:2011-03-07  
endall 写道
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。
x和y是变量,所以不等,如果改成
final String x = "hello";
final String y = "world";
把x,y变成常量
(a == (x + y))就会返回true

改成final后,运行结果还真是true了,能分析一下吗?
0 请登录后投票
   发表时间:2011-03-07  
基础啊,基础
0 请登录后投票
   发表时间:2011-03-07  
第二题晕了,第七题在大学学C语言的时候老师强调过好几次这种值传递的问题,所以没做错,看来基础有待增强啊~
0 请登录后投票
   发表时间:2011-03-07   最后修改:2011-03-07

其实应当好好理解字符串常量池的含义。

0 请登录后投票
   发表时间:2011-03-07  
fastbo 写道
endall 写道
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。
x和y是变量,所以不等,如果改成
final String x = "hello";
final String y = "world";
把x,y变成常量
(a == (x + y))就会返回true

改成final后,运行结果还真是true了,能分析一下吗?



final类型的变量x+y将在编译时决定值
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics