来源:
https://zhidao.baidu.com/question/1732129720808645067.html
class Test1 {
public static void main(String[] args) {
String a = "abc";// 问题1,是不是在堆内存的常量池里放了“abc”然后在栈内存里放了a,a中存的是常量池里abc的地址?
String b = new String("abc");
tt tt1 = new tt();
System.out.println(tt1);// 问题2,这个地方打出来的是什么东西,是地址吗?
System.out.println(a);// 问题3,这个地方打出来的为什么是a的值得,而不是问题2那样的东西?
System.out.println(b);// 问题4,既然是对象,为什么也会打出来值?而不是问题2那样的东西。
System.out.println(a.hashCode());// 可选题,hashCode不是打印地址吗?(该题值20分)
System.out.println(b.hashCode());
System.out.println(a == b);// 问题5,这里比的是地址吗?
}
}
class tt {
}
System.out.pringln(Object); 首先它打印的是Object的toString()方法的返回值。
问题1, 如你所说的那样。
问题2,打印出来 什么 那要看你tt的toString() 方法是怎么实现的,如果没有toString()方法,那tt会默认继承Object的toString()方法,而Object的toString()方法的实现就是返回对象的地址值。
问题3,String类同样也继承了Object,但是String类重写了Object的toString()方法,重写的目的就是返回字符串值本身,而非地址值。
问题4,同问题3.
a.hashCode()返回的是哈希值(一个int类型的数),System.out.println(int类型)的时候打印的也是int值本身
问题5,比较的是地址值。
总结: 打印出来什么是看对象类有没有实现toString()方法,如果没有那就打印对象的地址值,如果对象类重写了toString()方法,那就要看方法是怎么实现的了。
————————————————
版权声明:本文为CSDN博主「hongweibing1」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hongweibing1/article/details/68061061