18

我想知道为什么我们可以这样做:

Long l = 2L;
Float f = 2f;
Double d = 2d;

甚至

Double d = new Double(2);

并不是

Short s = 2s; //or whatever letter it could be

也不

Short s = new Short(2); //I know in this case 2 is an int but couldn't it be casted internally or something?

为什么我们需要使用 String 或 short 构造函数。

4

2 回答 2

13

但是你可以这样做:

Short s = 2;

或这个:

Short s = new Short((short)2);

或这个:

Short s = new Short("2");

只要数字在 [-2^15, 2^15-1] 范围内,上述任何一项都将起作用

于 2012-07-17T16:18:24.427 回答
4

Java 的主要规则之一是任何数学运算的结果都将存储在一个大变量中以避免截断。例如,如果您将 int 与 long 相加,则结果将很长。因此,对 byte、char 或 short 的任何操作都会产生 int,即使您将 1 添加到一个字节。有 2 种方法可以将结果存储在相同的数据类型中:

a)您进行显式转换:

short s=10;  
s=(short)(s+1);  

b)您可以使用速记操作的自动增量来要求 JVM 进行隐式转换:

short s=10;  
s+=21;  

或者

short s=10;  
s++;  

如果您需要短文字或字节文字,则必须对它们进行强制转换,因为没有类似Sors的后缀short

byte foo = (byte)100000;
short bar = (short)100000;
于 2012-07-17T16:12:47.977 回答