[英]Difference between single quotes and double quotes in java?
我有
System.out.println(2+" "+3);
System.out.println(2+' '+3);
第一個打印2 3,而第二個打印37可以任何人解釋為什么它打印37 ???
ascii中' '= 32
。
a:) System.out.println(2+" "+3); // string concatenation
b:) System.out.println(2+' '+3); // 2+ 32(32 ascii valur for space)+3 so 37
引用附加運算符的 Java語言規范:
如果
+
運算符的任一操作數的類型是String
,則操作是字符串連接。否則,
+
運算符的每個操作數的類型必須是可轉換(第5.1.8節)到原始數字類型的類型
對於數字類型 :
對操作數執行二進制數字提升(第5.6.2節)
二進制數字促銷 :
[...]否則,兩個操作數都轉換為
int
類型。
所以, 2 + " "
2+" "+3
是2 + " "
,這是一個字符串連接,而String + 3
也是字符串連接,因此2 + " " + 3
是"2" + " " + "3"
這意味着"2 3"
。
2 + ' '
2+' '+3
是2 + ' '
,空格文字是char
,因此它被轉換為int
(32),而2 + 32 + 3
是37
。
如果文字是變量,它實際上就是這樣,其中對變量的賦值僅用於說明中間結果的類型:
// String concatenation
String s = new StringBuilder().append(2).append(" ").append(3).toString();
System.out.println(s);
// Numeric addition
int n = 2 + (int)' ' + 3;
System.out.println(n);
append()
和println()
都被重載,因此它們不是完全相同的方法。
因為它們是文字,而不是變量,編譯器會在編譯時完成它,你真的得到了這個(嘗試反匯編.class文件以便自己查看):
System.out.println("2 3");
System.out.println(37);
第一個是將所有內容轉換為字符串。 第二個是轉換為整數。 空格的十進制代碼是32.如果你想要2和3是字符串,那么使用引號。
那是因為你正在打印2 2+ ' ' +3
的整數值,它會將' '
作為char
而不是string
轉換為簡單地將b)部分轉換為它的ASCII值,這將導致2 + ASCII value of Space + 3
,最終結果為37,因為space
的ASCII值為32。
第一個例子是執行字符串連接,所以答案非常直觀。 第二個例子是不同的,因為''不是一個字符串,它是一個字符。 char被轉換為整數代碼,這就是你得到這個數字的原因。
像這里的連接幾乎是Java容忍的一種情況。 在其他上下文中,char''和String“”顯示為true:有很多不同的類型。
除非System.out.println
的輸出參數顯式為java.lang.String
否則java會自動將它作為輸出參數給出的任何數據類型和對象轉換為java.lang.String
。
在你的第一個例子中, System.out.println(2+" "+3);
java所做的是掃描輸出參數並找到一個int
(2),雙引號" "
表示雙引號內的字符數組將被解釋為String
,另一個int
(3)。 Java將String " "
視為提示,參數中的其他所有內容也應被視為字符串。 那么有效的是System.out.println(2+" "+3);
被視為你已經寫好了
System.out.println(Integer.toString(2)+" "+Integer.toString(3));
在你的第二個例子中, System.out.println(2+' '+3);
相同的過程發生,但java找到' '
- 由單引號包圍的空格,告訴java它正在使用原始數據類型char
- 這就是為什么java將此作為一個附加處理的原因操作: 所有java原始數據類型都是數字 - 所以java接受該提示並將輸出參數解釋為int
(2),加法運算符(+), char
(空格字符) - 與unsigned short
,加法運算符(+)和另一個int
(3)。 空白字符的數字值為32,因此幕后轉換會像您編寫的那樣處理您的語句
System.out.println(Integer.toString(2+32+3));
當然,幕后進行的解析比我在這里描述的要復雜得多。 你為什么不試試:
System.out.println("The answer is "+(3+" "+2));
System.out.println("The answer is "+(3+2));
System.out.println("The answer is "+(3+' '+2));
甚至
System.out.println('a' + 'b' + 'c');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.