关于java中String的地址和值的问题

本文解析了Java中字符串和自定义对象的打印过程,详细解释了如何通过重写toString()方法来改变打印输出的内容,并对比了直接创建字符串与使用new关键字创建字符串的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来源:

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()方法,那就要看方法是怎么实现的了。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值