黑马程序员技术交流社区
标题:
求解:高手看看这个怎么解释
[打印本页]
作者:
小丑的媳妇2
时间:
2013-3-12 12:56
标题:
求解:高手看看这个怎么解释
本帖最后由 朱荣宁. 于 2013-3-13 10:30 编辑
今天看打一个简单的Java代码,如下;
String a = "abc";
String b = "abc";
System.out.println("====>"+ a==b );
高手看一下,结果是什么?我知道结果,但是不知道原因!菜鸟啊,唉
作者:
丁一
时间:
2013-3-12 13:00
本帖最后由 丁一 于 2013-3-12 13:07 编辑
System.out.println("====>"+ a==b );
先"====>"+ a 了 后再和b 做判断 是否相等
结果是====>false
作者:
张卫刚
时间:
2013-3-12 13:09
String a = "abc";
String b = "abc";
System.out.println("====>"+ a==b );true
字符串在内存里面有个常量池,池里面有个数组,数组用来存取abc字符,再次创建池中已经有与abc相同的就不会创建了,所以a b都指向abc
作者:
谢辉林
时间:
2013-3-12 13:21
本帖最后由 laughing 于 2013-3-12 13:33 编辑
String a="abc";
Sting b="abc";
System.out.println("====>"+ a==b ;
结果是true;
原因:
String a = "abc";你定义这样一个变量的时候,java此时先会去常量池寻找有没有"abc"这样的字符串,如果有,直接把内存地址交给a, 否则就生成一个"abc"的字符串当下一个String b = "abc";的时候,发现常量池已经有"abc"了,此时JVM不会再次生成"abc",而是直接交给"abc"引用给b, 所以此时你会发现a == b。
希望对你有帮助!!!
作者:
丁一
时间:
2013-3-12 13:23
特意运行了一下 结果是 ====>false
System.out.println("====>"+ a==b );
先"====>"+ a 结果为 ====> a
后再和b 做判断 是否相等
作者:
谢洋
时间:
2013-3-12 13:29
优选及不熟悉啊
作者:
Benwolf0818
时间:
2013-3-12 13:31
你要明确这个问题
System.out.println("====>"+(a==b) );//这个是true
与System.out.println(("====>"+ a)==b );//这个是false
是不同的
作者:
沈文杰
时间:
2013-3-12 13:49
这个还是运算符的优先级问题,最后简化后就是""+a==b;在百度百科中搜索运算符优先级可以得到资料
运算符优先级
按优先级从高到低排列如下:[ ] ( ) ++ -- ! ~ instanceof * / % + - << >> >>> <> < = > \ == != &^& & || ? := op= 。
显而易见,+的优先级大于==,故先执行左边的""+a;最终输出结果为false;
作者:
黑马-陈思源
时间:
2013-3-12 14:16
+号优先级高于==号
作者:
HM马明宇
时间:
2013-3-12 14:53
String a = "abc";
String b = "abc";
System.out.println("====>" + (a == b));
复制代码
不废话,你原来的代码结果是false,而且只有一个false
这是我给你改过之后的代码,一对比就很明显了:
改过之后的运行结果:====>true
你的代码表示 "====>"+a先运算,这时+是字符串连接符,会把a和 "====>"这个字符串连接起来的,然后才是和b进行==比较,所以结果很明显就是false了
代码的结果不能想当然,要按照严格的执行顺序去考虑,这样才不容易出错
希望能帮到你,加油哦!!!
作者:
小丑的媳妇2
时间:
2013-3-12 21:22
到底hi对还是错??{:soso_e101:}
作者:
安鹏宇
时间:
2013-3-13 00:57
不会大神们那么专业 通俗点讲吧
System.out.println("====>"+ a==b )
优先级顺序问题
一元 +- ++ -[其余的]
算术(和移位) * / % + - << >>
关系 > < >= <= == !=
逻辑(和按位) && || & / ^
:条件(三元) A>B?X:Y
赋值 =(以及复合赋值,如*=)
作者:
安鹏宇
时间:
2013-3-13 01:00
不会大神们那么专业 通俗点讲吧
System.out.println("====>"+ a==b )
优先级顺序问题
一元 +- ++ -[其余的]
算术(和移位) * / % + - << >>
关系 > < >= <= == !=
逻辑(和按位) && || & / ^
:条件(三元) A>B?X:Y
赋值 =(以及复合赋值,如*=)
这是由高到低排的, 算数运算符的优先级 要高于关系运算符
先算 + 号运算 再 ==
所以就是先算了 "====>"+ a 再用"====>"+ a和b进行比较 结果为false 不等于
如果"====>"+ (a==b) 先算 a==b 结果就为 true
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2