黑马程序员技术交流社区

标题: String对象的引用 [打印本页]

作者: 郑世光    时间: 2012-9-11 15:13
标题: String对象的引用
本帖最后由 郑世光 于 2012-9-11 15:46 编辑

老毕说String s2=new String("abc"); 在内存中有两个对象。但是这里只有一个引用 s2。s2应该是指向对象"abc"的。那么另个
对象的的引用在哪里呢?指向谁?
作者: 胡进辉    时间: 2012-9-11 15:30
不是所有的对象都要当指针一样用,一个对象是引用变量s2,一个是字符串对象“abc”。他们在内存中位置不一样,一个在堆内存, 一个在栈内存。简单来说一个就是路标,一个就是真实要的东西,
作者: 杨习平    时间: 2012-9-11 15:32
String str = new String("abc");
String str = "abc";
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。
而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指向”abc”,如果已经有”abc” 则直接令str指向“abc”。

比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
可以看出str1和str2是指向同一个对象的。

String str1 =new String ("abc");
String str2 =new String ("abc");
System.out.println(str1==str2); // false
用new的方式是生成不同的对象。每一次生成一个。

这是总结借鉴别人的,你会明白的。多想想
作者: 寇龙飞    时间: 2012-9-11 15:35
本帖最后由 寇龙飞 于 2012-9-11 15:37 编辑

1、“abc”本身是一个对象,因为String的构造函数:
  1. String(String original)
  2.           初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
复制代码
此对象匿名引用、无引用

2、new String(“abc”)这是另外一个对象。此对象的引用是s2
作者: 郑世光    时间: 2012-9-11 15:52
杨习平 发表于 2012-9-11 15:32
String str = new String("abc");
String str = "abc";
两种的形式来创建,第一种是用new()来新建对象的 ...

解释的很清楚,谢谢!
作者: 尤圣回    时间: 2012-9-11 18:09
先是创建直接量abc这个是一个对象 newString()有创建了一个对象




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