黑马程序员技术交流社区
标题:
请教下String对象“==”问题
[打印本页]
作者:
朱新根
时间:
2012-3-30 17:10
标题:
请教下String对象“==”问题
String s1="abc";
String s2=new String("abc");
String s3="abc";
问题1:为什么说String s2=new String("abc")是创立了两个对象?
问题2:s1==s3结果为true?
作者:
方江
时间:
2012-3-30 17:34
问题2:"=="比较的是该字符串的地址值。也就是。S1与S3所指向的是一个地址值,因为你先定义的S1.当内存中存在"abc'这个字符串时。S3则不再创建新的地址。而是直接指向了S1那个。所以为真。
问题1:S2="abc"是一个对象,当你New一个的时候也是一个对象,所以是两个对象。
作者:
Kristy_Li
时间:
2012-3-30 17:47
String为引用数据类型,这种数据类型在声明变量时会在堆中开辟空间用来保存变量的值,而在栈中保存所开辟空间的首地址!所以在这个地方s1,s2和s3都是指向保存变量的地址值!(1)s2=“abc”为一个对象,而new的时候又产生了一个对象;(2)s1=s3,是把s1的地址值赋给了s3,用“==”来比较的是他们具体的值,因此返回值为true。而用equals()方法来比较的话就是比较s1,s2,s3所指向的对象的值!例如s1.equals(s2),此时返回的是true!
作者:
胡川
时间:
2012-3-30 18:15
java5.0以后出现了一个对象池的概念,Java虚拟机在启动的时候会实例化9个对象池,这9个对象池分别用来存储8种基本类型的包装类对象和String对象,String str = "abc"这样写是从对象池中取abc的对象,如果对象池中已经有了abc这个对象,那么就不会从新给它分配新的空间了,如果这样写String s2 = new String("abc");就会分配新的空间 ,就是两个对象了。s1==s3指向的是同一地址 所以为true。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2