【问题标题】: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 中,我可以像这样在块内分配 shortbyte

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
  • 呃,我也没有找到这个问题:)

标签: java compiler-construction compiler-optimization short


【解决方案1】:

Java 中的整型数字文字只有两种:int(声明为 123)和 long(声明为 123L)。

  • short s = 1 是允许的,因为它是一个赋值,并且允许在那里进行狭义转换
  • short s = 67000 不起作用,因为您超出了 short 可以表示的最大值
  • short s = (short)67000 有效,因为您要进行强制转换,因此您明确要求类型检查器忽略 67000 超过最大值的事实
  • test(1) 不起作用,因为它是一个方法调用,不允许进行窄转换(int -> short)并且1 总是被编译器评估为整数文字

【讨论】:

    猜你喜欢
    • 2012-10-02
    • 2020-06-17
    • 2017-03-27
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    相关资源
    最近更新 更多