黑马程序员技术交流社区

标题: 弱问:关于String s 和int[] a: [打印本页]

作者: 官沛    时间: 2015-7-10 11:44
标题: 弱问:关于String s 和int[] a:
比如:      
       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打印出来是地址值?

作者: 何时归来看花开    时间: 2015-7-10 11:52
字符串和数组是有区别的
作者: 官沛    时间: 2015-7-10 21:20
具体一点呢?
我们刚上到面向对象,但昨天的考试题出了一道设计这方面。现在还没搞懂~
作者: 冷雨敲窗被未温    时间: 2015-7-10 21:30
因为字符串String类重写了toString方法, 而数组没有。
作者: 青皮核桃    时间: 2015-7-10 21:51
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方法,返回值时全路径名、类名、@+哈希值
个人理解,希望对你有帮助
作者: 我不信命ZW    时间: 2015-7-10 21:57
楼上解释得很清楚,其实我的理解就是一个是引用类型的String型对象,一个是引用类型的数组型变量,虽然都是引用。




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