Java学習問題1:boolean型データは何バイトですか?
質問1:boolean型データは何バイトですか?boolean型データが数バイトを占めることを検証するために、次のようにセグメントコードを書きました.
コンパイルは通じませんが、新聞にはシンボルsizeof(boolean)が見つかりません.Javaにsizeof演算子がないのではないでしょうか.調べてみるとやっぱりありません.もともとJavaはメモリを操作させないのでsizeofは提供されていません.
しばらく探してみたが,話がまあまあだった.
============================================
CおよびC++では、sizeof()演算子は、データ・アイテムに割り当てられた文字数を知る特別なニーズを満たすことができます.CとC++の中でsize()の最も一般的な応用は「移植」である.異なるデータは異なるマシン上で異なるサイズを持つ可能性があるため、サイズに敏感な演算を行う場合、プログラマーはそれらのタイプがどれだけ大きいかを心の中で数えなければならない.例えば、1台のコンピュータは32ビットで整数を保存することができ、もう1台は16ビットで保存することができる.明らかに、最初のマシンでは、プログラムはより大きな値を保存することができます.すでに考えているように、移植はCとC++プログラマーを悩ませる問題です.Javaは、すべてのデータ型がすべてのマシンのサイズが同じであるため、sizeof()演算子を必要としません.私たちは移植の問題を考慮する必要はありません.Java自体は「プラットフォームとは関係のない」言語です.以下から抜粋:http://www.zxbc.cn/html/20080605/56667.html
=============================================
本題に戻って、問題に戻って、私に見せない以上、私も答えを知らないで、ネットで探して、討論が本当ににぎやかであることを発見しました.最後にこの答えを採用しました.
答え:私の結論は:1)boolean a=true;//このaはJVMで4バイトの32ビットを占めている.2)boolean[] b = new boolean[10];//配列の場合、各booleanはJVMで1バイトを占めます.理由:1)JAVA仕様ではbooleanタイプのサイズは定義されていません.2)ただし、JVM仕様第2版では十分に説明されている.私の上の結論はその中から取り出したのです.準拠:(JVM仕様第2版3.3.4節)Instead,expressions in the Java programming language that operate on boolean values are compiled to use values of the Java virtual machine int data type. Where Java programming language boolean values are mapped by compilers to values of Java virtual machine type int,the compilers must use the same encoding.一方:Java virtual machine type int,whose values are 32-bit signed two's-complement integers.Arrays of type boolean are accessed and modified using the byte array instructions In Sun's JDK releases 1.0 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, boolean arrays in the Java programming language are encoded as Java virtual machine byte arrays, using 8 bits per boolean element.
原文住所:http://topic.csdn.net/u/20071128/11/19af0938-3700-4bb9-a84d-95a2908f8bbb.html
多読マニュアルやJVM仕様が分からないことを学び、上記の著者に感謝します.
package org.study;
class Chapter1_1 {
public static void main(String[] args){
boolean b=true;
System.out.println("sizeof(boolean)="+sizeof(b));
}
}
コンパイルは通じませんが、新聞にはシンボルsizeof(boolean)が見つかりません.Javaにsizeof演算子がないのではないでしょうか.調べてみるとやっぱりありません.もともとJavaはメモリを操作させないのでsizeofは提供されていません.
しばらく探してみたが,話がまあまあだった.
============================================
CおよびC++では、sizeof()演算子は、データ・アイテムに割り当てられた文字数を知る特別なニーズを満たすことができます.CとC++の中でsize()の最も一般的な応用は「移植」である.異なるデータは異なるマシン上で異なるサイズを持つ可能性があるため、サイズに敏感な演算を行う場合、プログラマーはそれらのタイプがどれだけ大きいかを心の中で数えなければならない.例えば、1台のコンピュータは32ビットで整数を保存することができ、もう1台は16ビットで保存することができる.明らかに、最初のマシンでは、プログラムはより大きな値を保存することができます.すでに考えているように、移植はCとC++プログラマーを悩ませる問題です.Javaは、すべてのデータ型がすべてのマシンのサイズが同じであるため、sizeof()演算子を必要としません.私たちは移植の問題を考慮する必要はありません.Java自体は「プラットフォームとは関係のない」言語です.以下から抜粋:http://www.zxbc.cn/html/20080605/56667.html
=============================================
本題に戻って、問題に戻って、私に見せない以上、私も答えを知らないで、ネットで探して、討論が本当ににぎやかであることを発見しました.最後にこの答えを採用しました.
答え:私の結論は:1)boolean a=true;//このaはJVMで4バイトの32ビットを占めている.2)boolean[] b = new boolean[10];//配列の場合、各booleanはJVMで1バイトを占めます.理由:1)JAVA仕様ではbooleanタイプのサイズは定義されていません.2)ただし、JVM仕様第2版では十分に説明されている.私の上の結論はその中から取り出したのです.準拠:(JVM仕様第2版3.3.4節)Instead,expressions in the Java programming language that operate on boolean values are compiled to use values of the Java virtual machine int data type. Where Java programming language boolean values are mapped by compilers to values of Java virtual machine type int,the compilers must use the same encoding.一方:Java virtual machine type int,whose values are 32-bit signed two's-complement integers.Arrays of type boolean are accessed and modified using the byte array instructions In Sun's JDK releases 1.0 and 1.1, and the Java 2 SDK, Standard Edition, v1.2, boolean arrays in the Java programming language are encoded as Java virtual machine byte arrays, using 8 bits per boolean element.
原文住所:http://topic.csdn.net/u/20071128/11/19af0938-3700-4bb9-a84d-95a2908f8bbb.html
多読マニュアルやJVM仕様が分からないことを学び、上記の著者に感謝します.