黑马程序员技术交流社区

标题: 关于String对象的问题,求解答 [打印本页]

作者: 樊志伟    时间: 2013-11-24 09:55
标题: 关于String对象的问题,求解答
String s = "abc";
String s1 = new String("abc");
毕老师说第二句话有两个对象怎么理解?他说new 是一个对象,"abc"又是对象,我还是理解不了。一个new单词就是一个对象么?
那像下面这段代码中,总共有几个Person对象,又有几个String对象呢?
  1. class Demo
  2. {
  3. pubilc static void main(String [] args)
  4. {
  5. Person p = new Person("xiaoming",5);
  6. }
  7. }
  8. class Person
  9. {
  10. String name;
  11. int age;
  12. Person(String name,int age)
  13. {
  14. this.name = name;
  15. thi.age = age
  16. }
  17. }
复制代码

作者: 容嬷嬷当年也是    时间: 2013-11-24 10:05
String s1 = new String("abc");
new String 代表第一个对象、这相当于一个地址,而abc却是代表了地址所赋予的值。所以有两个对象。只有一个person对象、person 是一个类。而String 也只有一个
作者: 王雷1    时间: 2013-11-24 10:21
String s = "abc" :s是存储在栈里。先在栈中创建一个对String类的对象引用变量s,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令s指向”abc”,如果已经有”abc” 则直接令s指向“abc”。
String s = new String("abc") : s1是存储在堆里。每调用一次就会创建一个新的对象。abc 是字符串的常量出现“abc”就在内存中创建了这个字符串把它用new关键字给了s1时等于是创建一个新的对象s所以是两个对象如果你接着写String a=new String("abc");a就是第三个对象字符串常量"abc"会长存与内存直到程序结束
作者: 潘际昌    时间: 2013-11-24 10:28

String s = "abc"; 这“abc”是第一个对象;然后String s1 = new String("abc"),new String("abc")这又是一个对象,这个对像里面的“abc”就是第一个对象。所以一起有两个对象。而Person p = new Person("xiaoming",5)只有一个对象,Person括号里面的"xiaoming",5只是Person的参数。
作者: 忄雾飞扬    时间: 2013-11-24 10:56
public static void main(String[] args) {
                //创建一个Person对象,并进行了有参构造函数的初始化赋值
                Person p = new Person("xiaoming",5);
                /*在上面这句代码中,创建了1个Person对象,存储于堆内存中,而p则是这个对象的地址引用,
                 创建了两个String对象"xiaoming",一个存在于堆内存中,一个存储在缓冲池中,因为"xiaoming"
                 是字符串常量,有可能被经常调用都会在缓冲池中存储了一份
                 */
       
        }




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