参数内的短/字节和块内的短/字节有什么区别[重复]

问题描述 投票:0回答:1

可能重复:
Eclipse 错误?什么时候短不是短?

在 Java 中,我可以在块内分配

short
byte
,如下所示:

short s = 20000;
byte  b = 120;

因为 20000 是一个

short
值,而 120 是一个
byte
值,如果我尝试尝试:

short s = 67000;
byte  b = 128;

我会收到一个错误,指出它无法从

int
编译到
byte
,其中

byte b = (byte)12232;

甚至不会触发价值可能丢失的警告。在函数调用中,我无论如何都必须强制转换它:

void test(short s){}
test(1) //invalid
test((short)1) //valid

return
键入时又没问题了。

short test(){
    return 1; //valid
}

为什么编译器有时想要知道数字的界限(至少是常量),而它似乎在其他地方忘记了它?

java compiler-optimization short
1个回答
4
投票

Java 中的整数数字文字只有两种:

int
(声明为
123
)和
long
(声明为
123L
)。

  • short s = 1
    是允许的,因为它是一个赋值并且允许狭义转换
  • short s = 67000
    不起作用,因为您超出了可以用
    short
  • 表示的最大值
  • short s = (short)67000
    之所以有效,是因为您正在进行强制转换,因此您明确请求类型检查器忽略 67000 超出最大值的事实
  • test(1)
    不起作用,因为它是方法调用,不允许窄转换(int -> Short),并且
    1
    始终被编译器评估为整数文字
© www.soinside.com 2019 - 2024. All rights reserved.