java_==和equal方法
java測試兩個變量是否相等有兩種方式:
一種是利用“==”運算符 值和對象的判斷
一種是利用equals()方法 只是值的判斷
1.如果兩個變量是基本類型變量,且都是數值類型(不一定數值類型嚴格相同),則只要兩個變量的值相等,就返回true。
例如:
int a=65;
float b=65.0f;
char c="A";
System.out.print("65和65.0f是否相等:"+(a==b));//輸出true
System.out.print("65和A是否相等:"+(a==c));//輸出true
2.如果兩個變量是引用類型變量,只有它們指向同一個對象時,“==”判斷才會返回true,但equals()方法可以比較。“==”不可用於比較類型上沒有父子關系的兩個對象。
例如:
String a=new String("123");
String b=new String("123");
System.out.print("a和b是否相等:"+(a==b));//輸出false
System.out.print("a和b是否相等:"+(a.equals(b));//輸出true
//a1直接引用常量池中的“你好java”
String a1="你好java";
//b1的“你好”、“java”在編譯時就確定下來了,直接引用常量池中的"你好java"
String b1="你好"+"java";
String s1="你好";
String s2="java";
//c1後面的字符串值不能在編譯時就確定下來,所以不能直接引用常量池中的"你好java"
String c1=s1+s2;
//關鍵字new調用構造器,創建一個新的String對象,並引用變量d1指向該對象
String d1=new String("你好java");
System.out.print(a1==b1);//輸出true
System.out.print(a1==c1);//輸出true
System.out.print(a1==d1);//輸出false
JVM使用常量池
常量池(constant pool):專門用於管理在編譯時被確定並被保存在已編譯的.class文件中的一些數據。它包括了關於類、方法、接口中的常量,還包括字符串常量。
當使用new String("你好java")時,JVM會先使用常量池來管理“你好java”直接量,再調用String類的構造器創建字符串對象。
java_==和equal方法