2

Java の byte と char と混同しています。次のプログラム セグメントがあります。

    byte b = 65;
    char c = 65;
    short s = 65;
    System.out.println("b:"+b+" c:"+c+ " s:"+s);  // outputs b:65 c:A s:65

b、c、および s のビット表現はすべて :: 00000000 01000001 です。私の質問は、ビットが同じである場合、それらがどのように異なる動作をするかです.bはバイト、cはchar、sはshortですか?もう 1 つの質問はchar c = 65;、なぜこれが正しいステートメントなのかということです。charにint値を割り当てていますが、エラーは発生しません。

ありがとう。

4

5 に答える 5

4

彼らはどのように異なる行動をとりますか?

JLSを参照してください:

整数型は、値がそれぞれ 8 ビット、16 ビット、32 ビット、および 64 ビットの符号付き 2 の補数整数である byte、short、int、および long と、値が 16 ビットの符号なし整数である char です。 UTF-16 コード単位を表します。

整数型の値は、次の範囲の整数です。

  1. バイトの場合、-128 から 127 まで (両端を含む)

  2. 略して、-32768 から 32767 まで (両端を含む)

  3. int の場合、-2147483648 から 2147483647 まで (両端を含む)

  4. -9223372036854775808 から 9223372036854775807 まで

  5. char の場合、'\u0000' から '\uffff' まで、つまり 0 から 65535 まで

もう 1 つの違いは、ラッパー クラスが異なることです: byteto Bytecharto Character、およびshortto Short

char c = 65;なぜこれが正しいステートメントなのですか?

char、その値は UTF-16 コード単位 (§3.1) を表す 16 ビットの符号なし整数です。

于 2013-06-18T10:21:44.323 に答える
3

byte箱入りですByte

char箱入りですCharacter

short箱入りですShort

これらの 3 つのクラスには 3 つの異なるtoString()メソッドがあります。そのため、表示が異なります。

次に、 から,intへの変換が自動的に行われ、対応するボクシング クラスにボックス化されます。bytecharshort

于 2013-06-18T10:23:04.070 に答える
2

1) それらのビット表現は同じではありません。それ01000001はバイト0000000001000001用で、short と char 用です。

2) 違いは、byte と short は符号付き整数であり、char は 16 ビットの Unicode 文字であることです。

3) 65 は int ではなく、定数です。int を割り当てようとすると、エラーが発生します。

   int x = 65;
   char c = x;   <-- error
于 2013-06-18T10:28:57.277 に答える
1

データの表現が考慮される限り、それらは異なる動作をしません。違いは、異なる間隔で値を保持できることだけです。

char に関しては、すべての文字に整数表現があるため、Java で有効な構文です。

于 2013-06-18T10:21:52.480 に答える
1

すべてのプリミティブ型( boolean, char, short, int, ...) は、実際にはメモリ内のビット配列です。

変数の型は、この変数が値を取ることができる範囲のみを定義します。

  • boolean1 ビット [範囲 0 ~ 1]
  • char16 ビット [範囲 0 ~ 216-1 または \u0000 ~ \uFFFF]
  • byte8 ビット [範囲 -128 ~ 127]
  • short16ビット[-32768~32767]
  • int32ビット[-2147483648~2147483647]
  • ...

charビット、または補数の 16 進数、10 進数、10 進数で表されます。それはどうでもいい事です。そのため、番号を割り当てることができ、この番号はその番号のUnicode表現に一致します。

于 2013-06-18T10:26:03.263 に答える