String和地址的关系

来源:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值