我是初学者,我搜索过并搜索过,找不到这个问题的答案。我知道int test = (int) (5.4);
正在向int转换一个double,但我不明白的是(int)
是什么。它似乎不是作为方法或类写的。它是以我尚未见过的独特方式编写的,我试图理解为什么这个语句在Java中有效。我本来期望像int test = Math.int(5.4)
这样的东西。我不明白为什么这个陈述有效。我希望这是有道理的。
答案 0 :(得分:1)
这是“铸造操作员”。它在Java语言中有自己的特殊语法(即它不是方法调用)。
它也适用于对象:
BigInteger n = (BigInteger) session.getAttribute("a number");
它用于两件事:
ClassCastException
。编译器还将检查转换是否完全不可能,如果是这种情况,则在编译时拒绝它。(*)或甚至不太具体的类型
答案 1 :(得分:0)
将double
简单地投射到int
。这是java支持的语法。当对象转换为特定类时,您会遇到类似的语法:
(ClassName) objectVariable...
您可以使用包装类,但可以使用它们的方法来执行转换。
答案 2 :(得分:0)
Java允许casting,这就是(int)(5.4)的作用! 因此,当您进行转换时,您告诉编译器您需要进行类型转换 这些转换不一定与基元相关,您基本上可以使用任何其他有效的DataType
答案 3 :(得分:0)
什么是Java中的强制转换?
嗯,所有的转换真正意味着将一个特定类型的对象转换为“将其转换为”另一个对象类型。此过程称为转换变量。
投射变量背后的规则是什么? 如果你要投射一个变量,你最有可能做一个所谓的向下投射。这意味着您正在使用Object并将其转换为更“特定”的Object类型。这是一个例子:
Object aSentenceObject = "This is a regular sentence";
String aSentenceString = (String)aSentenceObject;
你看到我们在这里做了什么?由于Object类型是变量的非常宽泛的类型,因此我们将变量“向下转换”为String
类型。现在,问题是,这是合法的吗?好吧,你可以看到存储在aSentenceObject
中的值只是一个普通的String
,所以这个演员是完全合法的。让我们看看相反的情况,一个“向上”:
String aSentenceString = "This is just another regular sentence";
Object aSentenceObject = (Object)aSentenceString;
这里我们采用一个更具体类型(String)的变量,并将其转换为更通用的(Object)变量类型。这也是合法的,实际上,向上转是合法的。
<强> Widening Primitive Conversion 强>
对基本类型的19个特定转换称为加宽基元转换:
byte to short,int,long,float或double
缩短为int,long,float或double
char to int,long,float或double
int to long,float或double
长期漂浮或加倍
float to double
<强> Narrowing Primitive Conversion 强>
原始类型的22个特定转换称为缩小基元转换:
short to byte或char
char to byte或short
int to byte,short或char
long to byte,short,char或int
float to byte,short,char,int或long
double to byte,short,char,int,long或float
缩小的原始转换可能会丢失有关数值整体幅度的信息,也可能会失去精度和范围。