Tag: 等于

在JDK 1.6中,String equals操作可以替换为==吗?

当我研究一些开源产品的源代码时,我发现代码如下: if (a==”cluser”) a是一个String变量。 字符串equals操作可以替换为==吗?

使用equals()方法时,为什么具有相同数据的两个对象不相等

public class Account { String account; double balance; Account(String account, double balance) { this.account = account; this.balance = balance; } } public class AccountTest { public static void main(String[] args) { Account a1 = new Account(“Sandy”, 1000); Account a2 = new Account(“Sandy”, 1000); System.out.println(a1.equals(a2)); } } 当我执行它显示“假”但对象包含变量中的相同数据时。解释。

为什么是myString.equals(“aString”); 不同于“aString”.equals(myString);?

我曾多次听说使用boolean equals(Object o)来比较Strings ,最好将常量放在函数的左侧,如下所示: 不好:myString.equals(“aString”); 好:“aString”.equals(myString); 为什么是这样?

什么不是2长变量等于==运算符在Java中进行比较?

当我尝试比较2个Long变量时,我遇到了一个非常奇怪的问题,它们总是显示为false,我可以通过Eclipse中的调试确定它们具有相同的数值: if (user.getId() == admin.getId()) { return true; // Always enter here } else { return false; } 以上两个返回值都是对象类型的Long,这让我很困惑。 并validation我写了一个这样的主方法: Long id1 = 123L; Long id2 = 123L; System.out.println(id1 == id2); 它打印真实。 那么有人可以给我一些想法吗? 我已经在Java Development工作了3年但是无法解释这个案例。

使用compareTo实现equals方法

一般问题:在Java中实现默认equals方法的覆盖时,我应该关注简单地利用已经实现的compareTo方法与将独立逻辑写入equals方法? 我注意到有人在另一个问题中提到foo.equals((String)null)返回false而String.compareTo((String)null)抛出NullPointerException 。 是什么让这些不一致的结果成为理想的功 样本equals方法: @Override public boolean equals(Object obj) { if (obj != null && obj instanceof MyClass) { MyClass msg = (MyClass)obj; return this.compareTo(msg) == 0; } return false; } 编辑:引用Comparable上的文档 当且仅当e1.compareTo(e2)== 0与c1的每个e1和e2的e1.equals(e2)具有相同的布尔值时,C类的自然排序被认为与equals一致。 null不是任何类的实例,并且e.compareTo(null)应抛出NullPointerException,即使e.equals(null)返回false 编辑: 经过进一步审查后,我发现可比较文件还说明了以下内容: 实现者必须确保所有x和y的sgn(x.compareTo(y))== -sgn(y.compareTo(x))。 (这意味着如果y.compareTo(x)抛出exception,x.compareTo(y)必须抛出exception。) 因为null.compareTo(x)显然会抛出一个NPE , x.compareTo(null)应该抛出一个NPE。 而对于平等,情况不一定如此。 我对NPE的正确处理非常重视,所以我发现这个相对重要。

Java,如果compareTo()返回0,为什么暗示对象是相等的?

我们有一个Person 。 人有名字和身高。 Equals和hashCode()仅考虑名称。 人是可比的(或者我们为它实施比较,无论哪一个)。 人员按身高进行比较。 期望两个不同的人可以具有相同高度的情况似乎是合理的,但是例如。 TreeSet的行为类似于comapareTo()== 0表示等于,而不仅仅是相同的大小。 为了避免这种情况,如果大小相同,比较可以继续查看其他内容,但是它不能用于检测相同大小的不同对象。 例: import java.util.Comparator; import java.util.HashSet; import java.util.Objects; import java.util.Set; import java.util.TreeSet; public class Person implements Comparable { private final String name; private int height; public Person(String name, int height) { this.name = name; this.height = height; } public int getHeight() { return height; } public […]

Java,如何将字符串与字符串数组进行比较

我一直在这里搜索一段时间,但一直未能找到答案。 我基本上需要使用数组来完成大学的这项任务。 然后我应该检查输入(也是一个String)匹配String数组中存储的内容。 我知道可以通过使用.equals()方法轻松比较Strings。 但是,相同的方法不适用于String数组。 我为StackOverflow创建了以下代码示例,因此您可以使用它来向我解释,如果您愿意的话。 我究竟做错了什么? import java.util.Scanner; class IdiocyCentral { public static void main(String[] args) { Scanner in = new Scanner(System.in); /*Prints out the welcome message at the top of the screen*/ System.out.printf(“%55s”, “**WELCOME TO IDIOCY CENTRAL**\n”); System.out.printf(“%55s”, “=================================\n”); String [] codes = {“G22”, “K13”, “I30”, “S20”}; System.out.printf(“%5s%5s%5s%5s\n”, codes[0], codes[1], codes[2], codes[3]); System.out.printf(“Enter […]

比较器和等号()

假设我需要使用某些域逻辑排序的元素的TreeSet 。 通过这个逻辑,一些元素的顺序并不重要,因此比较方法可以返回0,但在这种情况下我不能将它们放在TreeSet 。 所以,问:我将从这样的代码中得到什么缺点: class Foo implements Comparable{} new TreeSet(new Comparator(){ @Override public int compare(Foo o1, Foo o2) { int res = o1.compareTo(o2); if(res == 0 || !o1.equals(o2)){ return o1.hashCode() – o2.hashCode(); } return res; } }); 更新 : 好。 如果它应该始终是方法equals() , hashcode()和compareTo()之间的一致性,如@SPFloyd – seanizer和其他人说。 如果我将删除Comparable接口并在Comparator移动此逻辑(我可以在没有破坏封装的情况下完成它)会更好甚至更好吗? 所以它将是: class Foo{} new TreeSet(new Comparator(){ @Override public […]

等于和可比较集

我在这里发布了一些代码,正确解决了海报的问题。 OP希望删除重复项并将某些特殊项目放在列表顶部。 我使用了一个TreeSet和一个特殊的Comparable类,它包含了他们正在使用的Locale来实现他们想要的东西。 然后我开始思考……正如你所做的那样…我通过从compareTo方法返回0来消除重复,而不是从equals实现返回true ,因为需要做的是正确地指示Set的重复(从一个Set的定义 )。 我不反对使用这种技术,但我使用的是什么可能被视为无证件的function ? 我可以安全地假设继续这样做会继续发挥作用吗?

如何在Java中比较两个对象数组?

我有两个对象数组,如下所示: Object[] array1 = {0, 1, 2, 3}; Object[] array2 = {0, 1, 2, 3}; 我想知道数组是否相等。 我定义相等,因为array1中的每个值都与array2中该位置的值相同。 所以这两个数组是相同的。 找出这两个数组是否相等的最佳原因是什么? if(array1 == array2) 不是一个深度等于所以不会工作,我不知道是否循环每个元素并比较它们是解决这个问题的最佳和最有效的方法。 有没有人有更好的建议? 编辑:我需要一个可以进入嵌套数组的等号。