什么问题/陷阱,必须重写时,必须考虑equals和hashCode?
此代码将字符串分隔为标记并将它们存储在字符串数组中,然后将变量与第一个主页进行比较...为什么它不起作用?
public static void main(String...aArguments) throws IOException {
String usuario = "Jorman";
String password = "14988611";
String strDatos = "Jorman 14988611";
StringTokenizer tokens = new StringTokenizer(strDatos, " ");
int nDatos = tokens.countTokens();
String[] datos = new String[nDatos];
int i = 0;
while (tokens.hasMoreTokens()) {
String str = tokens.nextToken();
datos[i] = str;
i++;
}
//System.out.println (usuario);
if ((datos[0] == usuario)) {
System.out.println("WORKING");
}
}
Run Code Online (Sandbox Code Playgroud) 我有两种ArrayList类型Answer(自制类).
我想比较两个列表,看看它们是否包含相同的内容,但是没有订单问题.
例:
//These should be equal.
ArrayList<String> listA = {"a", "b", "c"}
ArrayList<String> listB = {"b", "c", "a"}
Run Code Online (Sandbox Code Playgroud)
List.equals声明如果两个列表包含相同的大小,内容和元素顺序,则它们是相等的.我想要同样的事情,但没有订单问题.
有一个简单的方法吗?或者我是否需要执行嵌套for循环,并手动检查两个列表的每个索引?
注意:我无法将它们更改ArrayList为其他类型的列表,它们需要保留它.
当我看到equals()方法的实现时,它什么也没做,只是做了什么==.所以我的问题是,当我们有==运营商做同样的工作时,需要将它作为单独的方法吗?
当覆盖java.lang.Object的equals()函数时,javadocs建议,
通常需要在重写此方法时覆盖hashCode方法,以便维护hashCode方法的常规协定,该方法声明相等的对象必须具有相等的哈希代码.
hashCode()方法必须为每个对象返回一个唯一的整数(这在基于内存位置比较对象时很容易,只需返回对象的唯一整数地址)
应该如何覆盖hashCode()方法,以便它仅基于该对象的特性为每个对象返回一个唯一的整数?
public class People{
public String name;
public int age;
public int hashCode(){
// How to get a unique integer based on name and age?
}
}
/*******************************/
public class App{
public static void main( String args[] ){
People mike = new People();
People melissa = new People();
mike.name = "mike";
mike.age = 23;
melissa.name = "melissa";
melissa.age = 24;
System.out.println( mike.hasCode() ); // output?
System.out.println( melissa.hashCode(); // output?
}
}
Run Code Online (Sandbox Code Playgroud) 有一个疑问是等于在Array List中工作的方法,下面代码剪断它打印为true.
ArrayList<String> s = new ArrayList<String>();
ArrayList<Integer> s1 = new ArrayList<Integer>();
System.out.println(s1.equals(s));
Run Code Online (Sandbox Code Playgroud)
有人知道为什么它会给出真正的答案.
为什么java Object类有两个方法hashcode()和equals()?其中一个看起来多余,它渗透到最底层的派生类?