Java在Java中实例化Short对象

Nun*_*ves 15 java short

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

Long l = 2L;
Float f = 2f;
Double d = 2d;
Run Code Online (Sandbox Code Playgroud)

甚至

Double d = new Double(2);
Run Code Online (Sandbox Code Playgroud)

并不是

Short s = 2s; //or whatever letter it could be
Run Code Online (Sandbox Code Playgroud)

也不

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

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

Ósc*_*pez 11

但你可以这样做:

Short s = 2;
Run Code Online (Sandbox Code Playgroud)

或这个:

Short s = new Short((short)2);
Run Code Online (Sandbox Code Playgroud)

或这个:

Short s = new Short("2");
Run Code Online (Sandbox Code Playgroud)

只要数量在[-2 ^ 15,2 ^ 15-1]范围内,上述任何一个都可以工作


Lio*_*ion 5

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

a) 你进行显式转换:

short s=10;  
s=(short)(s+1);  
Run Code Online (Sandbox Code Playgroud)

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

short s=10;  
s+=21;  
Run Code Online (Sandbox Code Playgroud)

或者

short s=10;  
s++;  
Run Code Online (Sandbox Code Playgroud)

如果您需要短文本或字节文本,则必须对它们进行强制转换,因为没有像Ssfor 这样的后缀short

byte foo = (byte)100000;
short bar = (short)100000;
Run Code Online (Sandbox Code Playgroud)