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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String str = "yes"   
if (str == "no")
str += "ok"
我个人认为创建了两个对象,一个是“yes”,一个是“no”,虽然if条件为假,但是我感觉应该是创建了这个对象(no)才能比较吧。由于if条件为假所以下面的str+=“ok”没执行所以就没创建对象了。不知道大家是不是这样理解的呢?

3 个回复

倒序浏览
                String str = "yes";
                System.out.println(str);
                if (str == "no")
                        str += "ok" ;
                System.out.println(str);
我做了测试  两个输出都是yes  
String str = "yes";  这句表示的是把yes对象的地址赋值给str    而no是另外一个对象    所以判断比较的是两个对象的地址,显然结果为false   确实没错
但是  这个no对象的地址   赋给了谁呢?     这个怎么做测试  ?  求指教····


回复 使用道具 举报
"no"在常量池之中,他是编译时期创建的字符串对象。一个常量的地址拿来有什么用呢?
在论坛搜索吧,关于String到底怎么回事内容多得很。
回复 使用道具 举报
这里可以说String类型确实是个类类型,但是因为常用,当我们在用到字符串的时候,我们通常是直接把双引号字符串付给了这个变量,而没有使用new,当然如果你使用new的话,那么它在内存中就会出现两个对象。
这个String类型也类似于基本数据类型,它的任何对象只要你放在了双引号当中,jvm就默认是存在于常量池的。你直接拿来用就可以了。就像int i = 4;一样,
在这里,str==“no”,比如说我们就相当于做了这么一个判断:if (i == 1)  它返回的也是false呀。你有给这个1找一个变量么?没有,它就是这么一个存在于常量池里的东西,只要你写出来了,我就默认这个1是存在的。直接拿来用就可以。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马