黑马程序员技术交流社区

标题: 看到一个关于创建几个对象的问题大家讨论下 [打印本页]

作者: 冯建鹏    时间: 2012-3-16 00:04
标题: 看到一个关于创建几个对象的问题大家讨论下
String str = "yes"   
if (str == "no")
str += "ok"
我个人认为创建了两个对象,一个是“yes”,一个是“no”,虽然if条件为假,但是我感觉应该是创建了这个对象(no)才能比较吧。由于if条件为假所以下面的str+=“ok”没执行所以就没创建对象了。不知道大家是不是这样理解的呢?
作者: 贠(yun)靖    时间: 2012-3-16 01:50
                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对象的地址   赋给了谁呢?     这个怎么做测试  ?  求指教····



作者: 许圣建    时间: 2012-3-16 03:28
"no"在常量池之中,他是编译时期创建的字符串对象。一个常量的地址拿来有什么用呢?
在论坛搜索吧,关于String到底怎么回事内容多得很。

作者: 张润政    时间: 2012-3-16 09:25
这里可以说String类型确实是个类类型,但是因为常用,当我们在用到字符串的时候,我们通常是直接把双引号字符串付给了这个变量,而没有使用new,当然如果你使用new的话,那么它在内存中就会出现两个对象。
这个String类型也类似于基本数据类型,它的任何对象只要你放在了双引号当中,jvm就默认是存在于常量池的。你直接拿来用就可以了。就像int i = 4;一样,
在这里,str==“no”,比如说我们就相当于做了这么一个判断:if (i == 1)  它返回的也是false呀。你有给这个1找一个变量么?没有,它就是这么一个存在于常量池里的东西,只要你写出来了,我就默认这个1是存在的。直接拿来用就可以。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2