A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[code=java]String a = "abc";
String b = "abc";
System.out.println("====>"+ a==b ); [/code]
结果是ture还是False呢,
这个题我编译了,你们猜一下再编译哦,太邪恶了,
这几天闲下来的时候就喜欢找点邪恶的代码,挺有意思的,算是业余活动了,你们也试试,?很开心的说,

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

25 个回复

倒序浏览
黑马网友  发表于 2011-9-27 17:03:09
沙发
必然性是 false, 不用运行也知道 ..

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
String类型的某些字符串是否应用到享元模式,本来我不得而知的,当时我写享元模式这篇文章(http://blog.sina.com.cn/s/blog_7597caf00100tjbr.html)时,也遇到过像楼主这样的问题,后来查阅资料,才知道Java运行环境有个字符串连接池,它和jndi是不同的,jndi一开始就创建很多个连接放入池子中,需要的时候直接去拿出来,而这个字符串连接池的机制是:当你创建的时某个字符串对象的时候才将这个字符串放入到池子中,比如像楼主的这个例子,第一次创建了个字符串为“abc”的a对象,放入池中,第二次创建相同字符串的b对象,当jvm发现字符串连接池中有这个字符串的时候,就去池中拿出这个字符串赋给b对象。因此这里输出为true。



回复底下几楼,失误失误。没看清楚题目直接答题了,光看到比较了,忘记前面还有个"=====>",因为平常经常性测bug,会在代码中输入符号之类的,导致今天看到了却不以为然,还以为光只有比较,忘记前面还有个运算符的操作,罪过!以后要注意了!

[ 本帖最后由 许晨峰 于 2011-09-28  00:30 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-9-27 17:15:07
板凳
楼上解释一大堆,但是却是错误的结果。
这题靠的时 运算符的优先级。
在sun公司的java标准中有个例子
System.out.println("a"+3+4);
System.out.println(3+4+"a");

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 17:24:42
报纸
结果当然是false,因为“==”表示比较的是值,s2和s1的地址值是不一样的。
回复 使用道具 举报
黑马网友  发表于 2011-9-27 17:29:47
地板
恩,其实还有个知识点,就是运算符优先级,这两个点看到哪一个都能说对,嘿嘿,
回复 使用道具 举报
黑马网友  发表于 2011-9-27 18:07:12
7#
是false ,这是必须 的: 因为“==”   是用来比较字符串常量的  而不是变量   变量用.equal()
回复 使用道具 举报
黑马网友  发表于 2011-9-27 18:29:52
8#
false   比较的不是a,b所赋值的内容是他们的地址值
回复 使用道具 举报
黑马网友  发表于 2011-9-27 19:05:44
9#
唉~~~看着楼上一个个的回答,真是令人揪心啊~~~:L

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 的确很揪心啊!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 20:34:42
10#
我们平时在用等号用的最多的地方是什么??在没学java之前。
就是比较2个数值是否相等 而数值在java中是什么类型 应该是原始类型 也就说是int byte long。。。。
string是java中的系统类 二个类相等能用等号去差别吗?? 判断二个对象是否相等 就是判断对象在栈内存中的地址值是否相等  因为地址值在内存中是唯一的!
回复 使用道具 举报
黑马网友  发表于 2011-9-27 20:53:56
11#

回复 板凳 的帖子

板凳靠谱,这种题要弄成选择题或者判断题,真是冤枉好多人啦,两个知识点只知道一个,还不如一个都不知道呢

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 呵呵,详细解释一下更好!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-27 20:55:38
12#
看着回帖有点晕,谁来个稳点的
回复 使用道具 举报
黑马网友  发表于 2011-9-27 21:06:11
13#
太邪恶了,太邪恶了
回复 使用道具 举报
黑马网友  发表于 2011-9-27 21:07:10
14#
"====>"+ a==b哈哈,确实有点好玩,如果没有前面的那一串,就是true了,或者后面两个比较用括号括起来也会有true,这道题相当于先算"====>"+ a,算出来应该是"====>abc",而b="abc",这时候应该可以看出来是false了。
回复 使用道具 举报
黑马网友  发表于 2011-9-27 21:49:54
15#
你们难道都没看到少了括号吗??
回复 使用道具 举报
黑马网友  发表于 2011-9-27 21:50:07
16#

回复 14 # 的帖子

实验结果与LS一样:victory:
回复 使用道具 举报
黑马网友  发表于 2011-9-27 22:15:31
17#
结果 true,String类是final的,==比较的是对象
回复 使用道具 举报
黑马网友  发表于 2011-9-27 23:23:52
18#
上面这题比较的是这两个字符串:"====>"+ a 和b
所以答案肯定是false
回复 使用道具 举报
他们指向的不同对象 用== 就是false ,如果是equal 的话就true


----------------------------------------------------------------
上面我第一次的理解错了,看了上面的人我才弄明白,这里有个小陷阱吧 “====》”+a==b其实是(“====》”+a)== (b),答案就是fasle,单就a==b是true,就如上面仁兄所说,在字符串连接池先有“abc”指向a,当对b进行赋值的时候在连接池中有“abc”,就把这个“abc”复制给b,所以a,b指向的是同一对象,a==b就是true.用equals更是如此。不知道我还有没有理解错误,欢迎大家给我指出来:lol
[ 本帖最后由 郭运明 于 2011-09-28  17:19 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1 新手加分!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-28 15:41:05
20#
其实很多人都把问题放在了 “==”
其实这道题考的是加了 “"=====>" +”这句话以后 运算优先级发生了变化!
看到后面有同学也讲出来了,自夸一下,我绝对没有看下面的介绍想到这个问题的!~谢谢!~~
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马