Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java在Java中实例化短对象_Java_Short - Fatal编程技术网

Java在Java中实例化短对象

Java在Java中实例化短对象,java,short,Java,Short,我想知道为什么我们可以这样做: Long l = 2L; Float f = 2f; Double d = 2d; 甚至 Double d = new Double(2); 而不是 Short s = 2s; //or whatever letter it could be 也不是 为什么我们需要用字符串或短字符串来获取构造函数。Java的主要规则之一是,任何数学运算的结果都将存储在一个大变量中,以避免截断。例如,如果将int与long相加,结果将是long。因此,对byte、char或s

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

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

Double d = new Double(2);
而不是

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


为什么我们需要用字符串或短字符串来获取构造函数。

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

a) 您可以执行以下操作:

short s=10;  
s=(short)(s+1);  
short s=10;  
s+=21;  
b) 您可以使用自动递增的速记操作来要求JVM执行隐式强制转换:

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


如果您需要short或byte literal,则必须强制转换它们,因为
short
没有类似
S
S
的后缀:

byte foo = (byte)100000;
short bar = (short)100000;
但你可以这样做:

或者这个:

Short s = new Short((short)2);
Short s = new Short("2");
或者这个:

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

只要数字在[-2^15,2^15-1]

范围内,上述任何一项都有效。@Eng.Fouad是正确的。0xFF在java中是一个int,即>>并且实际上不能执行Short s=new Short((Short)2);不是这样,就是我的日食错了。您需要使用short=2;甚至添加两个
short
s或
byte
s或
char
s将导致
int
。添加两个
int
s不会导致
long
int
在这里很特别。这也是
DataOutput#writeShort
采用int参数而不是short的另一个原因。