黑马程序员技术交流社区
标题:
看到一个关于创建几个对象的问题大家讨论下
[打印本页]
作者:
冯建鹏
时间:
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