我遇到参数类型为short
的方法调用,例如
foo (short s){...}
当我打电话时,我想到了两个解决方案:
一个是:
foo((short) 1);
和另一个:
short s = 1;
foo(s);
它们之间有什么区别,哪个更好?
答案 0 :(得分:1)
1将被视为Java中的int。
所以,当你做((短)1)时,你通过该函数传递1作为一个短参数。接收参数应该是短类型。
然而,当你有短s = 1时,它显然是short
整数。
请记住,在这两种情况下,执行操作时,short都将转换为int(这称为类型提升)。而且,如果使用 double 操作数进行操作,那些int将被提升为double。
它们之间有什么区别,哪个更好?
两者最终都做了相同的操作(传递一个短变量作为参数),并且它们都同样更好。但是,你应该防止使用short
整数,除非极其必要,因为它有一些缺点(当你不小心尝试将int / long存储到短时,导致编译时错误)。 / p>
答案 1 :(得分:1)
short s = 1
将变量定义为short
,其值为1
。
(short) 1
正在将int
值1
转换为原始数据类型short
。
没有区别。他们都创建了short
,其值为1
。
有关短路及其值范围的信息,请参阅Java: Primitive Data Types,因为将短路设置为高于或低于其规定范围的值将引发异常。
答案 2 :(得分:1)
两种解决方案都有效,两者之间的性能差异难以察觉。
(short) 1;
使用一个文字,它被转换为一个短片,作为函数foo
的参数传入。
short s = 1;
实际上在将值作为参数传递之前在内存中创建了一个变量,以防你想将变量用于其他事情。
答案 3 :(得分:1)
从up cast
到short
的java int
会自动发生。
但对于down casting
,你必须手动施放它。
short(integer_value)
(short) 1
如果使用强制转换调用,也可以发送整数参数。