[英]Ambiguous behavior of standard output stream
我想知道以下代碼的第5行和第6行的輸出為何不同?
/*1*/ class A
/*2*/ {
/*3*/ public static void main(String[] args)
/*4*/ {
/*5*/ System.out.println(3+5+"Message");
/*6*/ System.out.println("Message"+3+5);
}
}
輸出:
8Message
Message35
為什么第二行代碼包含35
而不是8
而不是35
?
System.out.println(3+5+"Message");
從左到右評估表達式。 左+
右+
是整數,因此加號比+
右是字符串連接。
讓我們這樣打破它(3+5+"Message")
3=integer
+=operator
5=integer
(3)integer (+) (5)integer = (8)integer,
而且比下一次通過
(8)integer (+) ("Message")String = (8Message)String
因此輸出為8Message
System.out.println("Message"+3+5);
從+
運算符開始,這里有一個字符串,因此發生了連接。 因此,輸出為Message35
Like the post above sais, you have operator precedence. Everything is evaluated from left to right.
System.out.println(3+5+"Message");
被翻譯成
System.out.println((3+5)+"Message"); So first the addition happens and the result concatenates with the string.
在另一種情況下:
System.out.println("Message"+3+5);
被翻譯成
System.out.println(("Message"+3)+5);
您有一個字符串和一個數字Message3 + 5 = Message53
我希望這可以清除它:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.