java中“==”和equals的区别
public static void main(String[] args) {
String str = "abc";
String str1 = str;
System.out.println(str == str1);
System.out.println(str.equals(str1));
}
在这里,str在栈里,而abc在常量值里以地址的方式存在。所以当str的常量值地址赋值给str1时,他们两个比较为true。
equals比较的是具体的值
public static void main(String[] args) {
String str = "abc";
Scanner sc = new Scanner(System.in);
String str2 = sc.nextLine();
System.out.println(str == str2);
System.out.println(str.equals(str2));
}
在这里当new一个新对象时,会在堆里开发一个新的空间,这时str2指向的是堆对象的路径,而堆对象在指向常量值。所以str的路径不等于str2的路径,所以结果是fals。
而equals比较的是具体的值,所以结果是true