Tag: 等于

为什么Java使用’equals’代替’==’来检查对象在Map中的存在?

假设我想将一个键及其值放在Map中。 我相信这是Java的作用: 获取密钥的Hashcode并检查映射中是否存在具有相同哈希码的密钥。 如果没有具有相同Hashcode的密钥,则可以将密钥放入Map中。 如果存在具有相同Hashcode的密钥,则使用equals来确定密钥是否可以放入Map中。 我的问题是为什么在这个过程中不使用==而不是equals ?

Java – 为什么我不能使用charAt()来查看char是否等于另一个?

我想看看我的字符串中的字符是否等于某个其他字符值,但我不知道字符串中的字符是什么,所以我使用了这个: if ( fieldNames.charAt(4) == “f” ) 但我得到错误: “Operator ‘==’ cannot be applied to ‘char’, ‘jav.lang.String'” 但是”g” == “h”似乎有效,我知道你可以使用’==’和char类型。 有没有其他方法正确地做到这一点? 谢谢!

使用私有构造函数扩展类的技术

与大多数Singleton类一样,是否存在使用私有构造函数“扩展”类的标准技术? 具体来说,我正在尝试扩展java.lang.management.ThreadInfo类,因为我将很多它们添加到HashSet来控制唯一性。 但是,我确定两个线程是否相等的方式是不同的,并且与equals()方法的默认实现不同。 在这种情况下,扩展类显然不是一个选项。 制作类似于在构造函数中接受ThreadInfo的包装类,然后使用值手动填充所有相关字段,然后覆盖equals()和hashCode() ,或者有更好的方法来执行此操作是否合理? 像我这样的东西就是我开始写的,但更好的实现是理想的: class ThreadInfoWrapper { private ThreadInfo info; ThreadInfoWrapper(ThreadInfo info) { this.info = info; } //Populate instance variables with Thread.State, thread ID, etc.. with //Getters/setters and all that other stuff public boolean equals(Object o) { //Unique implementation } public int hashCode() { //Whatever implementation } } 但这感觉就像是一种非常迂回的方式来实现一些基本function。 我调查了一下,Java标准库中不存在使用自定义比较器的集合的实现。 我想我可以编写自己的哈希集实现,但这对于一个简单的情况来说太过分了。 任何见解都会有所帮助。

使用HashMap计算实例

我有以下代码来计算数组中不同字符串的实例; String words[] = {“the”,”cat”,”in”,”the”,”hat”}; HashMap wordCounts = new HashMap(50,10); for(String w : words) { Integer i = wordCounts.get(w); if(i == null) wordCounts.put(w, 1); else wordCounts.put(w, i + 1); } 这是一种正确的做法吗? 一个简单的任务似乎有点啰嗦。 HashMap结果对我很有用,因为我将通过字符串对其进行索引。 我很担心这条线 else wordCounts.put(w, i + 1); 由于这个事实,可能会插入第二个key-value对 new Integer(i).equals(new Integer(i + 1)); 将是假的,所以两个Integers最终将在同一个String密钥桶下,对吧? 或者我只是过度思考自己陷入困境?

为什么在junit中assertEquals和assertSame为两个实例同一个类返回相同的结果?

根据文件 assertEquals()断言两个对象是相等的。 assertSame()断言两个对象引用同一个对象。 所以我期待如果我有一个类似下面的课程 class SomeClass {} 然后 SomeClass someClass1= new SomeClass(); SomeClass someClass2= new SomeClass(); assertSame(someClass1,someClass2); // fail assertEquals(someClass1,someClass2); // fail assertEquals传递和assertSame失败。 因为两个类的值都是等于但它们具有不同的参考位置。 由于我在两种情况下都失败了,那么我的问题是这两者之间有什么区别?

Java .equals()instanceof子类? 为什么不调用超类等于而不是最终?

它在Object的.equals(Object) javadoc中声明: 它是对称的:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才应返回true。 在示例代码中几乎无处不在,我看到重写的.equals(Object)方法,它使用instanceof作为第一个测试之一,例如: 在重写equals和hashCode时必须考虑哪些问题/陷阱? public class Person { private String name; private int age; public boolean equals(Object obj) { if (obj == null) return false; if (obj == this) return true; if (!(obj instanceof Person)) return false; … } } 现在使用class SpecialPerson extends Person equals : if (!(obj instanceof SpecialPerson)) return false; 我们不保证.equals()是对称的。 例如,这里已经讨论过: […]

为什么autoboxed整数和.getClass()值== – 相等,不仅.equals() – 相等?

也许我一直在Java上工作太久而没有真正理解它的一些基础知识。 我知道==用于对象引用相等,而.equals()用于对象值相等。 比较Integers : Integer x = 1, y = 1; System.out.println(x == y); // true 为什么? 由于使用了对象引用相等,因此它们应该是假的,因为它们都是不同的对象。 比较getClass()返回值: String s1 = “a”, s2 = “b”; System.out.println(s1.getClass() == s2.getClass()); // true 为什么? 再次如上所述,使用对象引用。 两者都使用getClass将返回单独的Class对象。 我是否遗漏了一些东西,或者我的思绪是否厌倦了Java编码?

HashSet’add’方法调用何时等于?

我在HashSet比较中做了这个测试,并且没有调用 equals 当farAway = false时,我想考虑等于(检查两个点距离的函数) 完全可编译的代码,你可以测试它,并告诉为什么在这个例子中没有调用equals。 public class TestClass{ static class Posicion { private int x; private int y; @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Posicion other = (Posicion) obj; if ( farAway(this.x, other.x, this.y, other.y,5)){ return false; […]

我是否使用Google Guava正确实现了equals和hashCode?

我正在使用hibernate并需要覆盖equals和hashCode()。 我选择使用google-guava的equals和hashCode助手。 我想知道我在这里是否遗漏了什么。 我有id / image和filePath的 get / set方法。 @Entity @Table(name = “IMAGE”) public class ImageEntity { private Integer idImage; private String filePath; @Override public int hashCode() { return Objects.hashCode(getFilePath()); } @Override public boolean equals(final Object obj) { if(obj == this) return true; if(obj == null) return false; if(obj instanceof ImageEntity){ final ImageEntity otherImage = […]

Java可以帮助我避免equals()中的样板代码吗?

我实现了Java 7方式的equals(): @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; MyClass other = (MyClass) obj; return Objects.equal(myFirstField, other.myFirstField) && Objects.equal(mySecondField, other.mySecondField); } 有没有办法减少代码重复? 我更喜欢类似的东西 @Override public boolean equals(Object obj) { if (Objects.equalsEarlyExit(this, obj)) return Objects.equalstEarlyExitResult(this, obj); MyClass other = […]