黑马程序员技术交流社区

标题: 方法string [打印本页]

作者: 赵嘉男    时间: 2012-4-24 20:28
标题: 方法string
方法中定义string S= "abc";那么S 是一个对象吗?
作者: Friends★    时间: 2012-4-24 20:32
String s="abc";s是一个对象,只不过先给它赋一个初值abc
作者: 周海诚    时间: 2012-4-29 14:10
是一个对象。S 可以说成对象 没问题。严格点的话 是对象的引用!
这里如果只定义String S;的话就不是一个对象了,
只能说是定义了一个名为S的String类型的变量。
而你所写的这个是先创建了一个"abc"对象,而S又指向该对象,
因此S也是一个对象。这种创建对象的方式是String特有的,
这种创建方式与new有很大的区别,好像与JAVA中JVM中的字符串池有关,
要真想详细了解这方面的知识,你可以多查一下其它的资料。
作者: 胡奎    时间: 2012-4-29 14:38
S不是对象,abc才是对象,s存放栈内存中,abc存放在堆内存中,s只是abc对象的一个引用,存放着对象在堆内存中的地址。
作者: 根号5    时间: 2012-4-29 15:06
s 不是一个对象,确切的说是对象的引用。
先给楼主说一下关于String类型的问题,楼主的的String s = "abc",这是在字符串池中创建一个字符串对象,而String s = new String("abc");当以这种方式生成String类型的对象时,相当于创建了两个对象,这种方法创建的时候会先看一下字符串池中有没有 abc 这个字符串,有的话就不在字符串池中创建abc了,然后再在对内存中创建 对象 abc,这是会把此时的地址传递给 引用变量 s .
如果两个引用同时指向了字符串池中存在的对象,则他们的地址值是一样的,也就是说:
String str1 = “abc”;
String str2 = "abc";
则 str1 == str2;
作者: 毕博    时间: 2012-4-29 15:47
万物皆对象(总感觉想宗教的说法,哈哈)

既然都是对象,那这个s也肯定是,只不过他是什么对象。

上边的同学说的都好啊。
补充两句吧
这种赋值,可以看做String s = new String("abc");
这里new个对象,把abc放里,把地址首地址给了s。
所以调用s就相当于找到常量池里的abc。
s虽然是一个引用,但是确确实实的体现了对象的思想。
你看到的是s(看不出什么端倪),但是s却代表的一个string类型的里面带有“abc”的对象。
s内部封装的地址。
作者: 孙宇晨    时间: 2012-4-29 22:29
S 不是对象 . 严格上来说 他是对象的引用
abc 也就是 变量S的值 才是对象.




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