java中"=="与"equals"的区别
java类型分为两种:基本类型 和 引用类型
基本类型:byte ,short,int,long,double,float,boolean,char标志
譬如: int a = 10;int b = 10 (基本数据类型)
引用类型:四种情况 强引用,弱引用,软引用,虚引用
譬如: String t = new String(a);(引用数据类型)
“==” 两种情况:
基本类型的比较:
① 比较的是地址值是否相同, 比较的是值 例子:t1 == t2 true
引用类型的比较
② 比较的是引用所指向的地址值是否相同 例子:t1 == t8 false t1指向的地址值是常量池。 t8指向的地址值是 堆中 开辟的一块内存,(内存中包含对象)
“equals” 比较的是两个对象的内容(源码分析总结)
①先比较两个对象的地址值是否相同。相同直接返回 true。 不相同继续比较。
②再判断两个对象是否 是string类的实例。 不是 返回false。是就继续比较。
③再判断两个对象的字符串长度,如果长度不相同就返回 false。 长度相同就继续比较。
④分别把两个对象中的字符(char)拿出来依次比较,有一个字符不相同,返回false。 所有的字符比较都相同 ,则返回true。
package mylove.home.demo;
/**
* 测试 == 与equals 的区别
* @author RioNice#XWX
* “==” 两种情况:
* 基本类型的比较① 比较的是地址值是否相同, 比较的是值 例子:t1 == t2 true
* 引用类型的比较② 比较的是引用所指向的地址值是否相同 例子:t1 == t8 false t1指向的地址值是常量池。 t8指向的地址值是 堆中 开辟的一块内存,(内存中包含对象)
* java类型分为两种:基本类型 和 引用类型
* 基本类型:byte ,short,int,long,double,float,boolean,char标志
* 譬如: int a = 10;int b = 10 (基本数据类型)
* 引用类型:四种情况 强引用,弱引用,软引用,虚引用
* 譬如: String t = new String(a);(引用数据类型)
*
* “equals” 比较的是两个对象的内容(源码分析总结)
* ①,先比较两个对象的地址值是否相同。相同直接返回 true。 不相同继续比较
* ②再判断两个对象是否 是string类的实例。 不是 返回false。是就继续
* ③再判断两个对象的字符串长度,如果长度不相同就返回 false。 长度相同就继续
* ④分别把两个对象中的字符(char)拿出来依次比较,有一个字符不相同,返回false。 所有的字符比较都相同 返回true
*/
public class DemoEquals {
public static void main(String[] args) {
String t1 = "zhangsan";
String t2 = "zhangsan";
String t3 = "zhang"+"san";
String t4 = "zhang"+new String("san");
String t5 = "zhang";
String t6 = "san";
String t7 = t5+t6;
String t8 = new String("zhangsan");
System.out.println(t1 == t2);//true
System.out.println(t1.equals(t2)); //true
System.out.println("-------------------------");
System.out.println(t1 == t3);//true
System.out.println(t1.equals(t3));//true
System.out.println(t1 == t4);//false
System.out.println(t1.equals(t4)); //true
System.out.println("++++++++++++++++++++++++++++++++++++");
System.out.println(t1 == t7);//false
System.out.println(t1.equals(t7)); //true
System.out.println(t1 == t8);//false
System.out.println(t1.equals(t8)); //true
System.out.println("***********************t4比 t8");
System.out.println(t4==t8);//false
System.out.println(t4.equals(t8)); //true
}
}
Console控制台输结果
true
true
-------------------------
true
true
false
true
++++++++++++++++++++++++++++++++++++
false
true
false
true
***********************t4比 t8
false
true
下面是借鉴大佬的图