2

Java の過去の試験問題に、兄弟である質問があります。

プリミティブ データ型を暗黙的に変換すると、精度が失われ、正しくない結果が得られる可能性があります。

A 真、B 偽

答えの鍵は A: True

精度が失われたり、誤った結果が得られたりすることはないと思います。明示的な変換では精度が失われ、誤った結果が得られる可能性がありますが、暗黙的な変換は得られません。

例えば:

int i = 9;

short s = 3;

i = s; // implicit conversion, neither loose 
      //precision nor incorrect results

s = i; // compile error, do we call this implicit conversion? 
       //if yes, then the answer to question 3 is True, 
       //but I don't think this is an implicit conversion, 
       //so I think answer is false.   

メモに記載されているように:

暗黙的な型変換: プログラマは型を変換しようとはしません。型は特定の状況下でシステムによって自動的に変換されます。

誰でもアドバイスしてもらえますか?

どうもありがとう。

4

3 に答える 3

6

答え = A

    float f = Long.MAX_VALUE;
    System.out.println(Long.MAX_VALUE);
    System.out.printf("%.0f", f);

出力

9223372036854775807
9223372036854776000
于 2013-10-20T15:44:40.527 に答える
3

コンパイラが暗黙的な変換を許可する場合もありますが、それでも精度が失われる可能性があります。例えば:

long a = Long.MAX_VALUE;  // 9223372036854775807
double b = a;             // 9223372036854776000

詳細については、JLSを参照してください。

于 2013-10-20T15:39:23.640 に答える
1

代入演算子には暗黙の変換があります。これらは、精度を失うか、オーバーフローを引き起こす可能性があります。通常の割り当ての場合、暗黙的な変換は、コンパイラが安全であることを認識している場合にのみ発生します。それでも精度が失われる可能性がありますが、オーバーフローは発生しません。

例えば

final int six = 6;
byte b = six; // compiler uses constant propagation and value is in range.

int five = 5;
byte b2 = five; // fails to compile

double d = 5.5;
five += d; // compiles fine, even though implicit conversion drops the 0.5
// five == 10 not 10.5

five += Double.NaN; // five is now 0 ;)
于 2013-10-20T15:47:11.310 に答える