参数内部和块内部的短/字节有啥区别[重复]
Posted
技术标签:
【中文标题】参数内部和块内部的短/字节有啥区别[重复]【英文标题】:What is the difference between short/byte inside a parameter and inside a block [duplicate]参数内部和块内部的短/字节有什么区别[重复] 【发布时间】:2013-01-28 00:15:52 【问题描述】:可能重复:Eclipse bug? When is a short not a short?
在 Java 中,我可以像这样在块内分配 short
或 byte
:
short s = 20000;
byte b = 120;
因为 20000 是 short
值,而 120 是 byte
值,如果我尝试尝试:
short s = 67000;
byte b = 128;
我会收到一个错误,指出它无法从 int
编译到 byte
where
byte b = (byte)12232;
甚至不会触发值可能丢失的警告。在函数调用中,无论如何我都必须强制转换它:
void test(short s)
test(1) //invalid
test((short)1) //valid
在return
输入时再次正常。
short test()
return 1; //valid
为什么编译器有时想知道数字的范围(至少从常量中),而它似乎在别处忘记了?
【问题讨论】:
@assylias 一个很好的发现,你记住了所有的 java 问题吗? +1 呃,我也没有找到这个问题:) 【参考方案1】:Java 中的整型数字文字只有两种:int
(声明为 123
)和 long
(声明为 123L
)。
short s = 1
是允许的,因为它是一个赋值,并且允许在那里进行狭义转换
short s = 67000
不起作用,因为您超出了 short
可以表示的最大值
short s = (short)67000
有效,因为您要进行强制转换,因此您明确要求类型检查器忽略 67000 超过最大值的事实
test(1)
不起作用,因为它是一个方法调用,不允许进行窄转换(int -> short)并且1
总是被编译器评估为整数文字
【讨论】:
以上是关于参数内部和块内部的短/字节有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章
python视角中的参数和参数有啥区别[不重复:)]? [复制]