ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
这篇文章,我们讨论一些java的最基本的东西,这些东西我们一般刚刚学java的时候就学过,但是不一定真正明白。正好,我在做一个读取内存的值,涉及到bit位的值的读取和写。那就可以讨论一个java的基本数据类型的值在机器的详细情况: Java基本数据类型共有八种三类:字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。 Java决定了每种简单类型的大小。这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是Java程序具有很强移植能力的原因之一。 下面,我们就是要分析java基本数据类型的取值范围和占多少字节多少bit(1字节 = 8 bit)。 ### 代码如下: ~~~ public class BaseDataInfo{ public static void main(String[] args) { System.out.println("Boolean.FALSE:"+Boolean.FALSE); System.out.println("Boolean.TRUE:"+Boolean.TRUE); int maxByte = Byte.MAX_VALUE; int minByte = Byte.MIN_VALUE; int sizeByte = Byte.SIZE; System.out.println("Byte.MAX_VALUE:"+maxByte); System.out.println("Byte.MIN_VALUE:"+minByte); System.out.println("Byte.SIZE:"+sizeByte); int maxChar = Character.MAX_VALUE; int minChar = Character.MIN_VALUE; int sizeChar = Character.SIZE; System.out.println("Character.MAX_VALUE:"+maxChar); System.out.println("Character.MIN_VALUE:"+minChar); System.out.println("Character.SIZE:"+sizeChar); int maxShort = Short.MAX_VALUE; int minShort = Short.MIN_VALUE; int sizeShort = Short.SIZE; System.out.println("Short.MAX_VALUE:"+maxShort); System.out.println("Short.MIN_VALUE:"+minShort); System.out.println("Short.SIZE:"+sizeShort); int maxInt = Integer.MAX_VALUE; int minInt = Integer.MIN_VALUE; int sizeInt = Integer.SIZE; int bitCount = Integer.bitCount(10); System.out.println("Integer.MAX_VALUE:"+maxInt); System.out.println("Integer.MIN_VALUE:"+minInt); System.out.println("Integer.SIZE:"+sizeInt); System.out.println("Integer.bitCount(1):"+bitCount); long maxLong = Long.MAX_VALUE; long minLong = Long.MIN_VALUE; int sizeLong = Long.SIZE; System.out.println("Long.MAX_VALUE:"+maxLong); System.out.println("Long.MIN_VALUE:"+minLong); System.out.println("Long.SIZE:"+sizeLong); float maxFloat = Float.MAX_VALUE; float minFloat = Float.MIN_VALUE; int sizeFloat = Float.SIZE; System.out.println("Float.MAX_VALUE:"+maxFloat); System.out.println("Float.MIN_VALUE:"+minFloat); System.out.println("Float.SIZE:"+sizeFloat); Double maxDouble = Double.MAX_VALUE; Double minDouble = Double.MIN_VALUE; int sizeDouble = Double.SIZE; System.out.println("Double.MAX_VALUE:"+maxDouble); System.out.println("Double.MIN_VALUE:"+minDouble); System.out.println("Double.SIZE:"+sizeDouble); } } ~~~ ### 输出结果: Boolean.FALSE:false Boolean.TRUE:true Byte.MAX_VALUE:127 Byte.MIN_VALUE:-128 Byte.SIZE:8 Character.MAX_VALUE:65535 Character.MIN_VALUE:0 Character.SIZE:16 Short.MAX_VALUE:32767 Short.MIN_VALUE:-32768 Short.SIZE:16 Integer.MAX_VALUE:2147483647 Integer.MIN_VALUE:-2147483648 Integer.SIZE:32 Integer.bitCount(1):2 Long.MAX_VALUE:9223372036854775807 Long.MIN_VALUE:-9223372036854775808 Long.SIZE:64 Float.MAX_VALUE:3.4028235E38 Float.MIN_VALUE:1.4E-45 Float.SIZE:32 Double.MAX_VALUE:1.7976931348623157E308 Double.MIN_VALUE:4.9E-324 Double.SIZE:64 ### 从输出结果可以看出: <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"><p>boolean</p></td><td valign="top"><p>只有true和false两个取值</p></td></tr><tr><td valign="top"><p>byte</p></td><td valign="top"><p>8位,最大存储数据量是255,存放的数据范围是-128~127之间</p></td></tr><tr><td valign="top"><p>short</p></td><td valign="top"><p>16位,最大数据存储量是65536,数据范围是-32768~32767之间</p></td></tr><tr><td valign="top"><p>int</p></td><td valign="top"><p>32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1(也就是-2147483648~2147483647)。从int取值范围可以看,int适合20亿级别的整形数据。</p></td></tr><tr><td valign="top"><p>long</p></td><td valign="top"><p>64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2 的63次方减1(也就是-9223372036854775808~9223372036854775807)。从long的取值范围可以看出,long适合海量级(亿亿级)的整形数据。</p></td></tr><tr><td valign="top"><p>float</p></td><td valign="top"><p>32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。从float的取值范围可以看出,float适合e38级的float数据。</p></td></tr><tr><td valign="top"><p>double</p></td><td valign="top"><p>64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。从double的取值范围可以看出,double适合e308的double数据。</p></td></tr><tr><td valign="top"><p>char</p></td><td valign="top"><p>16位,存储Unicode码,用单引号赋值</p></td></tr></tbody></table> <table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td><p align="center">基本数据类型</p></td><td><p align="center">boolean</p></td><td><p align="center">byte</p></td><td><p align="center">char</p></td><td><p align="center">short</p></td><td><p align="center">int</p></td><td><p align="center">long</p></td><td><p align="center">float</p></td><td><p align="center">double</p></td></tr><tr><td><p align="center">bit位数</p></td><td><p align="center">1</p></td><td><p align="center">8</p></td><td><p align="center">16</p></td><td><p align="center">16</p></td><td><p align="center">32</p></td><td><p align="center">64</p></td><td><p align="center">32</p></td><td><p align="center">64</p></td></tr><tr><td><p align="center">字节位数</p></td><td><p align="center">0.125</p></td><td><p align="center">1</p></td><td><p align="center">2</p></td><td><p align="center">2</p></td><td><p align="center">4</p></td><td><p align="center">8</p></td><td><p align="center">4</p></td><td><p align="center">8</p></td></tr><tr><td><p align="center">封装类</p></td><td><p align="center">Boolean</p></td><td><p align="center">Byte</p></td><td><p align="center">Character</p></td><td><p align="center">Short</p></td><td><p align="center">Integer</p></td><td><p align="center">Long</p></td><td><p align="center">Float</p></td><td><p align="center">Double</p></td></tr></tbody></table> ### 参考资料: [Java基本数据类型总结](http://www.cnblogs.com/doit8791/archive/2012/05/25/2517448.html) [http://www.cnblogs.com/doit8791/archive/2012/05/25/2517448.html](http://www.cnblogs.com/doit8791/archive/2012/05/25/2517448.html)