xiaoxiao冬天 2015-01-11 13:08 采纳率: 100%
浏览 1607
已采纳

下面这个小程序打印出的为什么是true和false啊,求大神分析一下,万分感谢~

public class BasicContainer {
public static void main(String[] args) {
Collection c = new HashSet();
c.add("hello");
c.add(new Name("lu","dongdong"));
c.add(new Integer(100));
System.out.println(c.remove(new Integer(100)));
System.out.println(c.remove(new Name("lu","dongdong")));
}
}

class Name {
private String firstName,lastName;
Name(String firstName,String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public String toString() {
return firstName + " " + lastName;
}
}

打印出的就是:
true
false

  • 写回答

2条回答 默认 最新

  • threenewbee 2015-01-11 13:14
    关注

    很简单,Hashset的Remove会执行equals方法去比较传入的参数和内部存储的参数,相同的删除返回true,找不到返回false

    而class类型比较的是引用,即便每个字段相同,两个对象还是不同的,所以你传一个new的对象,返回false。
    而integer比较的是值,只要里面存的是100,你传入100,就相同,就能删除。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分