java中== 和equals的区别

本文主要介绍== 和equals的区别

1. == 比较的是地址,引用类型(除了String类)的时候,只要不是同一个对象,就不是同一个地址,String类型的时候,如果new出来两个对象,那么也是不同地址,如果不是new,那么就是同一个地址,因为都是存放在字符串常量池中,如果是基本数据类型,都是存放在常量池中,所以地址都是一样的。

代码如下图所示:

String str_1 = new String("123"); 
String str_2 = new String("123"); // str_1和str_2是不同的对象,因此地址不同。
System.out.println(str_1 == str_2);  // false
String str_1 = "123";
String str_2 = "123"; // str_1和str_2都是常量,存放在字符串常量池中。
System.out.println(str_1 == str_2); // true

2. equals比较的如果是引用类型(除了String类型),那么使用的是object中的equals方法,比较的地址是否一样;

如果是String类型的对象,String类重写了equals方法,首先比较地址是否一样,一样返回true;内容不一样返回false。

如果是基本数据类型对应的包装类(Integerater...),使用的equals也不是Object中的equals方法,而是重写了该方法,首先比较是否是同类型,不同类型直接返回false,同类型再比较内容是否一致,一致返回true。

String str_1 = "123";
String str_2 = "123";
System.out.println(str_1.equals(str_2)); // true
String str_1 = new String("123");
String str_2 = new String("123");
System.out.println(str_1.equals(str_2)); // true

 

posted @ 2022-12-03 22:07  zwGitOne  阅读(157)  评论(0编辑  收藏  举报