A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 樊志伟 高级黑马   /  2013-11-24 09:55  /  1752 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
String s1 = new String("abc");
new String 代表第一个对象、这相当于一个地址,而abc却是代表了地址所赋予的值。所以有两个对象。只有一个person对象、person 是一个类。而String 也只有一个

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

回复 使用道具 举报
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"会长存与内存直到程序结束

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 神马都是浮云

查看全部评分

回复 使用道具 举报

String s = "abc"; 这“abc”是第一个对象;然后String s1 = new String("abc"),new String("abc")这又是一个对象,这个对像里面的“abc”就是第一个对象。所以一起有两个对象。而Person p = new Person("xiaoming",5)只有一个对象,Person括号里面的"xiaoming",5只是Person的参数。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
public static void main(String[] args) {
                //创建一个Person对象,并进行了有参构造函数的初始化赋值
                Person p = new Person("xiaoming",5);
                /*在上面这句代码中,创建了1个Person对象,存储于堆内存中,而p则是这个对象的地址引用,
                 创建了两个String对象"xiaoming",一个存在于堆内存中,一个存储在缓冲池中,因为"xiaoming"
                 是字符串常量,有可能被经常调用都会在缓冲池中存储了一份
                 */
       
        }

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马