簡體   English   中英

標准輸出流的歧義行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM