2012-07-17 106 views
13

我想知道为什么我们可以这样做:的Java实例Short对象在Java中

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来构造函数。

+3

没有短也不字节文字中Java的。 – 2012-07-17 16:06:36

+0

@ Eng.Fouad是正确的。 0xFF是java中的一个int,“>>和<<运算符取和返回整数,短和字节只剩下一点。不知道为什么。 – lynks 2012-07-17 16:08:19

回答

2

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

a)您做显式转换:

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

b)你可以用短手操作的自动递增问JVM做隐式转换:

short s=10; 
s+=21; 

OR

short s=10; 
s++; 

如果需要短期或字节的文字,因为有像Ss没有后缀short它们必须铸造:

byte foo = (byte)100000; 
short bar = (short)100000; 
+0

即使添加两个'short'或'byte'或'char's将导致一个'int'。虽然添加两个'int'不会导致'long'。 'int'在这里很特别。这是'DataOutput#writeShort'接受一个int参数而不是简短的另一个原因。 – mihi 2012-07-17 16:32:02

11

但是你可以做到这一点:

Short s = 2; 

或者这个:

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

或者这样:

Short s = new Short("2"); 

上述任何将工作,只要该数量是在范围[-2^15,2^15-1]

+0

其实你不能做Short s = new Short((short)2);无论是那个还是我的月食都是错误的。你需要使用short short = 2;而不是在构造函数上使用它。 – 2012-07-17 16:22:51

+3

@NunoGonçalves它在我的Eclipse中工作 – 2012-07-17 16:24:27

+0

啊,我的坏,我做错了......:/ – 2012-07-17 16:27:23