3 回答

TA貢獻1848條經驗 獲得超10個贊
沖突類型
隱式轉換String
為不沖突。的JLS,5.1.11節,定義了非沖突的方式這種轉換。
基本上,任何原始類型轉換為包裝對象類型,然后toString()
在引用類型上調用。此方法定義在Object
并因此保證存在于所有引用類型上。
雖然這種轉換是“自動的”,但它不是在沖突類型之間進行的,因為有一個易于理解、有意義的規則描述了總是會成功的轉換(除非從原始值創建一個對象生成一個OutOfMemoryError
)。
這與稱為縮小原始轉換的沖突轉換形成對比,例如int
to byte
。這可能會丟失信息,因此不會隱式發生。它是只有顯式轉換的合法代碼,例如byte b = (byte) myInt
.

TA貢獻1835條經驗 獲得超7個贊
要去的地方始終是 Java 語言規范。在這種情況下,我們談論的是15.18.1,字符串連接運算符 +:
如果只有一個操作數表達式的類型為
String
,則在運行時對另一個操作數執行字符串轉換(第 5.1.11 節)以生成字符串。
特別是,+
根據上下文,符號可以表示三種不同的含義:一元加號、字符串連接或加法。

TA貢獻1802條經驗 獲得超5個贊
在 java 中,會發生從一種數據類型到另一種數據類型的自動類型轉換或擴展,因為這兩種數據類型是兼容的,并且目標類型大于源類型。因此,當 Java 編譯器自動將數據從一種類型轉換為另一種類型時,根本不會丟失任何信息,因為目標類型的內存始終大于源類型。但是,在類型不兼容的情況下,java 編譯器會檢查類型兼容性,如果兩者類型不兼容,因為不會發生自動類型轉換。如果這樣做,它將自動導致信息丟失。因此,java 阻止了不兼容或沖突的數據類型之間的自動類型。為了在不兼容的類型之間轉換數據,java 具有縮小轉換。在縮小轉換范圍內,這兩種數據類型可能兼容也可能不兼容,目標可能大于也可能不大于源。在縮小范圍中,用戶明確縮小數據范圍,使其適合目標類型。縮小可能會導致信息丟失,例如將雙精度型轉換為整數類型時,小數點后的所有信息都會丟失。java中的例子:
import java.util.*;
class byteb
{
public static void main(String args [])
{
double a=30.45;
int b;
//b=a;
b=(int)a;
System.out.println("b="+a +"and"+ "a="+b);
}
}
Run code snippetHide resultsExpand snippet
添加回答
舉報