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 の主なルールの 1 つは、切り捨てを避けるために、数値演算の結果を大きなサイズの変数に格納することです。たとえば、int を long で追加すると、結果は長くなります。したがって、バイトに 1 を加算した場合でも、byte、char、または short に対する演算は int になります。結果を同じデータ型に格納するには、次の 2 つの方法があります。

a)明示的なキャストを行います:

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

b) 省略形操作の自動インクリメントを使用して、JVM に暗黙のキャストを行うように依頼できます。

short s=10;  
s+=21;  

また

short s=10;  
s++;  

ショート リテラルまたはバイト リテラルが必要な場合は、Sorのような接尾辞がないsため、キャストする必要がありshortます。

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