真是奇葩

zgd77521 2014-06-27 01:55:05
分析一下这俩打印结果


public class B {

public static void main(String[] args) {
B b1 =new B();
B b2 =new B();

System.out.println(b1.equals(b2));
System.out.println(b1==b2);
}

}

...全文
116 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgd77521 2014-06-27
  • 打赏
  • 举报
回复
引用 11 楼 dandan8989251 的回复:
楼上说的是对的!equals是从OBJECT超类继承过来的!它的==与equals是没有区别的!都是比较引用地址!你的自定义类默认继承OBJECT所以默认也是比较引用地址,你自己的自定义类可以重写它的equals比较规则! String类源码中就是重写了equals比较规则!比较字符内容! 请参考下面 http://blog.csdn.net/zxzy668/article/details/3933403
非常感谢,和我想的一样哈,豁然开朗··
zgd77521 2014-06-27
  • 打赏
  • 举报
回复
引用 12 楼 dandan8989251 的回复:
[quote=引用 9 楼 zgd77521 的回复:] [quote=引用 7 楼 sonstar 的回复:] 要想equals返回true,必需重写equals方法
求重写equals方法的代码。。 [/quote]

public class B {
 
    String s;
    @Override
	public boolean equals(Object obj) {
		//在这里面代码随意写
		return true;
	}
   
    @Override//跟这个方法类似
    public int hashCode() {
         
        return 11111;
    }

 
    public static void main(String[] args) {
        B b1 = new B();
        B b2 = new B();
         
        System.out.println(b1==b2);
        System.out.println(b1.equals(b2));
    }

     
}


[/quote] 恩。我知道了
dandan8989251 2014-06-27
  • 打赏
  • 举报
回复
引用 9 楼 zgd77521 的回复:
[quote=引用 7 楼 sonstar 的回复:] 要想equals返回true,必需重写equals方法
求重写equals方法的代码。。 [/quote]

public class B {
 
    String s;
    @Override
	public boolean equals(Object obj) {
		//在这里面代码随意写
		return true;
	}
   
    @Override//跟这个方法类似
    public int hashCode() {
         
        return 11111;
    }

 
    public static void main(String[] args) {
        B b1 = new B();
        B b2 = new B();
         
        System.out.println(b1==b2);
        System.out.println(b1.equals(b2));
    }

     
}


dandan8989251 2014-06-27
  • 打赏
  • 举报
回复
楼上说的是对的!equals是从OBJECT超类继承过来的!它的==与equals是没有区别的!都是比较引用地址!你的自定义类默认继承OBJECT所以默认也是比较引用地址,你自己的自定义类可以重写它的equals比较规则! String类源码中就是重写了equals比较规则!比较字符内容! 请参考下面 http://blog.csdn.net/zxzy668/article/details/3933403
zgd77521 2014-06-27
  • 打赏
  • 举报
回复
引用 8 楼 eaglezhao 的回复:
你应该去了解==是如何进行判断的,equals是如何进行判断的,那样你就很清楚了。
根据对象而言,其实==就是equals 同样是判断对象的内存地址。恩,应该是这样的
zgd77521 2014-06-27
  • 打赏
  • 举报
回复
引用 7 楼 sonstar 的回复:
要想equals返回true,必需重写equals方法
求重写equals方法的代码。。
eaglezhao 2014-06-27
  • 打赏
  • 举报
回复
你应该去了解==是如何进行判断的,equals是如何进行判断的,那样你就很清楚了。
sonstar 2014-06-27
  • 打赏
  • 举报
回复
要想equals返回true,必需重写equals方法
sonstar 2014-06-27
  • 打赏
  • 举报
回复
两个false
zgd77521 2014-06-27
  • 打赏
  • 举报
回复
引用 3 楼 tlfu_12344 的回复:
equals调的是Object的equal,也就是==,都是false很明显
下面这个呢?

public class B {


	@Override
	public int hashCode() {
		
		return 11111;
	}

	public static void main(String[] args) {
		B b1 = new B();
		B b2 = new B();
		
		System.out.println(b1==b2);
		System.out.println(b1.equals(b2));
	}
	
}
依然一叶 2014-06-27
  • 打赏
  • 举报
回复
楼上正解,跟踪下代码就知道了。
花木兰1闪21A 2014-06-27
  • 打赏
  • 举报
回复
equals调的是Object的equal,也就是==,都是false很明显
zgd77521 2014-06-27
  • 打赏
  • 举报
回复
引用 1 楼 sunbo624 的回复:
都是false
WHY?
sunbo624 2014-06-27
  • 打赏
  • 举报
回复
都是false

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧