问题是新手,但我不明白为什么Java或其他OOL中的原始类型无法投放。 我的意思是你不能做的原因:
int k = 1;
String t = (String) k;
我知道原始类型不是类,但我想知道这个原因的核心。
答案 0 :(得分:3)
您始终可以(隐式地)将较窄的基元类型转换为更宽的基元类型。这称为加宽基元转换。例如:
int i = 10;
long l = i;
您可以明确地将更宽的基元类型转换为更窄的基元类型。这称为缩小基元转换。在这种情况下,您告诉编译器您知道自己在做什么,因为缩小的基元转换可能会丢失有关数值整体大小的信息,也可能会丢失精度和范围。
long l = 10;
int i = (int)l;
答案 1 :(得分:2)
演员不会转换内存中的内容。它只是更改了如何访问内容的视图。 1字节int如何呈现2字节字符串" 32"没有有效的方法。
您当然可以投射1个字节的基元,但我猜它不是您所期望的:
@Test
public void castTests() {
assertEquals('7', (char) 55);
assertEquals(55, (int) '7');
}
演员不会改变记忆中的内容。所以你的int 55成为字节55的字符串表示,即" 7"。
答案 2 :(得分:1)
以下是Java variable conversions including casting的文档。
您可能会发现此discussion on Java casting更容易理解。
只要您使用强制转换运算符或表达式并且Java规则允许特定的变量类型转换,您就可以转换基本类型。但您确实需要遵循转换规则。
我不确定其他面向对象的语言,但是在C ++中,如果你想使用C样式转换,你可以做各种讨厌的转换。因为你最终可能会受到伤害,所以使用C ++样式转换比C样式转换更受欢迎,因为编译器会检查转换。
答案 3 :(得分:1)
您可以在java中投射基本类型。从较窄,较小的内存大小,类型转换为更宽,更大的内存大小,类型是隐含的。 例如:
int i= 0 ;
long j = i; // implicit cast from int to long
从较大类型到较小类型的转换是明确的。通过使用以下语法i = (int) j;
在括号中指定较窄的类型,告诉编译器从更宽的类型转换为更窄的类型
示例:
long j = 0;
int i = (int) j; // explicit cast from long to int