程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 基礎-JAVA初學者, 一些坑求助

基礎-JAVA初學者, 一些坑求助

編輯:編程綜合問答
JAVA初學者, 一些坑求助

這裡有一些語句, 其中錯誤的都注釋掉了,都是類型錯, 求解為什麼?
例如第一處注釋
這邊X是int型, b1是byte型, 無法賦值
它下一行Y是int型, b2是byte型, 賦值成功
是否和編譯過程有關?

    int a = 1;
    final int X = a;
    final int Y = 10;
    //byte b1 = X;
    byte b2 = Y;
    byte b3 = Y + 1;
    //byte b4 = (4 < 5)? X : 4;
    byte b5 = (4 < 5)? Y : 4;
    byte b6 = 12;
    byte b7 = (4 < 5)? b6 : 4;
    //byte b8 = b6 + 4;
    byte b9 = (4 < 5)? b6 : ('3' + 1);
    //byte b10 = (4 < 5)? b6 : '3';
    char ch1 = 'A';
    char ch2 = (4 < 5)? ch1 : (4 + 1);
    //char ch3 = (4 < 5)? 'A' : b6;
    //short s = (4 < 5)? 'A' : b6;

最佳回答:


  具體分析了一下原因是,你的X的賦值是通過變量int a來完成的,編譯器無法確定a的值是否在byte數據類型的范圍內,所以編譯器會報錯Type mismatch: cannot convert from int to byte。所以需要自己強制轉換
 而byte b2=Y之所以能成功是因為Y的值是常量10,在byte數據范圍內,編譯器會自動完成int-byte的轉換的,反編譯可以看到這行是bipush 10,自動將int轉換成byte並入棧。這個編譯器會自動識別並完成類型轉換的。
 但是如果你修改下Y的值成200的話,同樣還是會報跟X一樣的錯誤。所以這個問題的根源是編譯器對byte和int自動轉換的處理方式。
Theresa_zxx
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved