簡體   English   中英

為什么 Java 在兩個不同的環境中給我兩個不同的錯誤,即使(簡單的)代碼是相同的?

[英]Why Java is giving me two different errors in two different envirnonments, even though the (simple) code is the same?

我有這個簡單的代碼:

public class Main {

    public static void main(String[] args) {

        byte a = 10, b = 20, c = a+b;

          System.out.println(a);

    }

}

這當然是一個錯誤。 但是,如果我使用在線編輯器(例如 JDoodle)編譯代碼,則會得到以下輸入,這正是我所期望的:

error: incompatible types: possible lossy conversion from int to byte
      byte a = 10, b = 20, c = a+b;
                                ^
  1 error

否則,如果我用 Eclipse (2018-12) + JDK 編譯代碼:

java version "1.8.0_231"
  Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
  Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)

我得到這個不同的錯誤:

Unresolved compilation problem: 
    Type mismatch: cannot convert from int to byte

這怎么可能? 我認為第一個錯誤是正確的(預期的)行為。 我應該認為我的 jdk 有問題嗎?

Java 語言規范沒有強制要求特定的錯誤消息。 該規范只是簡單地說明了一些事情(所有示例均來自JLS 第 14 章,但在整個規范中都可以找到類似的示例):

如果 final 作為局部變量聲明的修飾符出現不止一次,則是編譯時錯誤。

如果 T 是空類型,則是編譯時錯誤。

如果一個帶標簽語句的標簽名稱在該標簽范圍內用作另一個帶標簽語句的標簽,則是編譯時錯誤。

生成編譯器錯誤的具體規則在JLS 15.26.1 中

如果右側操作數的類型與變量的類型(第 5.2 節)的賦值不兼容,則會發生編譯時錯誤。

編譯器實現者可以隨意放置他們認為有用的任何消息。 算自己幸運,他們不只是說: Erk! .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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