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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 官沛 中级黑马   /  2015-7-10 11:44  /  398 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如:      
       String s = new String("abc");  
        System.out.println(s);
               
        int[] a = new int[]{1,2,3};
        System.out.println(a);

字符串变量s 和数组变量 a,都是引用数据类型变量,都是在栈内存,并指向堆内存的实体。
为什么s打印出来是abc这个值,而a打印出来是地址值?

5 个回复

倒序浏览
字符串和数组是有区别的
回复 使用道具 举报
具体一点呢?
我们刚上到面向对象,但昨天的考试题出了一道设计这方面。现在还没搞懂~
回复 使用道具 举报
因为字符串String类重写了toString方法, 而数组没有。
回复 使用道具 举报
String s = new String("abc");  
其实这句话完成了两个对象的建立,new String()是在堆内存中new出来一个对象,而在abc其实是存储于方法区中字符串常量池,s指向堆内存中的new String();new String()有指向abc,s间接指向abc,当打印s时,他会默认调用String类的toString()方法,该方法重写了Objeact的toString方法,返回的是该对象本身,所以会打印"abc"

而int数组在打印a是,也默认调用toString方法,他没有重写Object类的toString方法,返回值时全路径名、类名、@+哈希值
个人理解,希望对你有帮助
回复 使用道具 举报 2 0
楼上解释得很清楚,其实我的理解就是一个是引用类型的String型对象,一个是引用类型的数组型变量,虽然都是引用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马