记录一个关于java中(System.out.println() )打印输出引用对象名时出现的一个问题,此问题暂未解决。

Java中,创建用new创建一个对象的时候,在堆中分配内存空间,也就是说此时地址是确定的,那么接下来我的疑问就来了。

第一步,看出现问题的场景,示例代码如下:

	public static void main(String[] args) throws Exception{
		
		Person p1=new Person();
		Person p2=new Person();
		
		System.out.println(p1);
		System.out.println(p2);
	
	}

//代码输出如下:
Person@15db9742
Person@6d06d69c

第二步:思考,如果说new对象的时候,堆中内存空间就已经确定了,那么此时p1和p2的地址也就是确定的,System.out.println函数输出的内存地址应该是确定的,也就是说,不论我是先输出p1还是先输出p2,那么地址的输出也应该是相对应的变化,比如,我将上述代码中的两个打印输出调换位置,此时,代码的输出也应该是相应变化的,但是实际上并没有变。示例代码如下:

	public static void main(String[] args) throws Exception{
		
		Person p1=new Person();
		Person p2=new Person();
		
		System.out.println(p2);
		System.out.println(p1);
	
	}

//代码输出如下:
Person@15db9742
Person@6d06d69c

第三步:思考这是为什么????

此问题没有解决。。。

关于println打印的底层代码是hashCode,这里没弄明白,为此,附上几篇链接,随着自己技术的提高,会慢慢解决的。

博客一:java对象是在什么时候创建的  链接:https://www.cnblogs.com/wsw-blog/p/10069917.html

博客二:java中hashCode()方法的作用 

链接:https://www.cnblogs.com/hujingwei/p/5322821.html

链接:https://blog.csdn.net/fdyufgf/article/details/83551764

  hashcode方法返回该对象的哈希码值。
      hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过hashCode()找到相应的位置,然后再根据equals()方法判断这个位置上的对象与当前要插入的对象是不是同一个。
所以,Java对于eqauls方法和hashCode方法是这样规定的:
   *如果两个对象相同,那么它们的hashCode值一定要相同;
   *如果两个对象的hashCode相同,它们并不一定相同。

博客三:重写System.out.println   链接:https://blog.csdn.net/qq1072313099/article/details/56843164

博客四:浅谈Java中的hashCode方法 链接:https://www.jianshu.com/p/e2a3cefe8d40

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值