public static final String A = "ab"; // 常量A
public static final String B = "cd"; // 常量B
public static void main(String[] args) {
String s = A + B; // 將兩個(gè)常量用+連接對(duì)s進(jìn)行初始化
String t = "abcd";
if (s == t) {
System.out.println("s等于t,它們是同一個(gè)對(duì)象");
} else {
System.out.println("s不等于t,它們不是同一個(gè)對(duì)象");
}
}
s等于t,它們是同一個(gè)對(duì)象
A和B都是常量,值是固定的,因此s的值也是固定的,它在類被編譯時(shí)就已經(jīng)確定了。也就是說(shuō):String s=A+B; 等同于:String s=”ab”+”cd”;
特例2
public static final String A; // 常量A
public static final String B; // 常量B
static {
A = "ab";
B = "cd";
}
public static void main(String[] args) {
// 將兩個(gè)常量用+連接對(duì)s進(jìn)行初始化
String s = A + B;
String t = "abcd";
if (s == t) {
System.out.println("s等于t,它們是同一個(gè)對(duì)象");
} else {
System.out.println("s不等于t,它們不是同一個(gè)對(duì)象");
}
}
s不等于t,它們不是同一個(gè)對(duì)象
A和B雖然被定義為常量,但是它們都沒(méi)有馬上被賦值。在運(yùn)算出s的值之前,他們何時(shí)被賦值,以及被賦予什么樣的值,都是個(gè)變數(shù)。因此A和B在被賦值之前,性質(zhì)類似于一個(gè)變量。那么s就不能在編譯期被確定,而只能在運(yùn)行時(shí)被創(chuàng)建了。
String s1 = new String("xyz"); 創(chuàng)建了幾個(gè)對(duì)象?