鹏叔(https://pengtech.net)

导航

java 数据类型

java 数据类型

转载请注明出处:https://www.cnblogs.com/guoapeng/p/13783339.html

第一章:java 基本数据类型

Java 中的基本数据类型只有以下8 个,除了基本类型(primitive type),剩下的都是引用类型(reference type)。

原始类型:boolean,char,byte,short,int,long,float,double。

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double。

1. 布尔型:

原始类型(primitive type):

boolean: 

说明:boolean数据类型表示一位的信息, 但是由于虚拟机处理的最小单位是byte, 所以存储一位的boolean信息仍然需要1byte。

存储字长:1byte 

值范围:false, true

包装类型(reference type):

Boolean(java.lang.Boolean)

包装类型存储字长:

对象头(Header)(Markword + 类指针kclass):

32位系统上占用8bytes,64位系统上占用16bytes

实例数据(Instance Data):1byte

对齐填充(Padding):7bytes

总共:32位系统上占用16bytes,64位系统上占用24bytes

值范围:Boolean.FALSE, Boolean.TRUE

2. 整型:

8位:

原始类型(primitive type):

byte: 

说明:byte 数据类型是8bit、有符号的,以二进制补码表示的整数;

存储字长:1byte

值范围:-128(-2^7)到 127(2^7-1)

默认值:0

包装类型(reference type):

Byte(java.lang.Byte):

存储字长:32位系统上占用16bytes,64位系统上占用24bytes(参考Boolean对象存储结构推算)

 

16位:

原始类型(primitive type):

short:

说明:short 数据类型是 16 位、有符号的以二进制补码表示的整数

存储字长:2byte

值范围:-32768(-2^15)到 32767(2^15-1)

默认值:0

包装类型(reference type):

Short(java.lang.Short)

存储字长:32位系统上占用16bytes,64位系统上占用24bytes(参考Boolean对象存储结构推算)

 

32位:

基本类型(primitive type):

int

说明:int 数据类型是32位、有符号的以二进制补码表示的整数;

存储字长:4byte

值范围:-2,147,483,648(-2^31)到 2,147,483,647(2^31-1)21亿多, 助记:比中国人口多约二分之一,约是世界人口的三分一

默认值:0

包装类型(reference type):

Integer(java.lang.Integer)

存储字长:32位系统上占用16bytes,64位系统上占用24bytes(参考Boolean对象存储结构推算)

64位:

原始类型:

 long

说明:long 数据类型是 64 位、有符号的以二进制补码表示的整数;

值范围:-9,223,372,036,854,775,808(-2^63)到 9,223,372,036,854,775,807(2^63 -1)什么概念?

 

包装类型(reference type):

大于64位

 对于某些科学计算,64位整数依然不够用, 比如本人曾经就遇到64位不够用的情况,用计算机尽可能快地求出尽可能多的素数,然而对于大于64位的整数java没有提供原始类型,此时可以使用java 类库提供的包装类型BigInteger(java.math.BigInteger) 该类是Number(java.lang.Number)的子类。

BigInteger bi = new BigInteger("1234567890");
System.out.println(bi.pow(5)); // 2867971860299718107233761438093672048294900000

BigInteger:

说明:BigInteger内部用一个int[]数组来模拟一个非常大的整数,BigInteger用于表示任意大小的整数;

BigInteger是不变类,并且继承自Number

BigInteger转换成基本类型时可使用longValueExact()等方法保证结果准确,但是要处理ArithmeticException;

BigInteger转换成基本类型时也可使用longValue()等方法,如果BigInteger表示的范围超过了基本类型的范围,转换时将丢失高位信息,即结果不一定是准确的。

3. 浮点型:

32位

原始类型(primitive type):

float

说明:float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;浮点数不能用来表示精确的值,如货币;

值范围:IEEE745 ~ IEEE754

默认值是 0.0f;

包装类型(reference type):

 Float(java.lang.Float)

64位

原始类型(primitive type):

double

说明:double类型同样不能表示精确的值,如货币;

值范围:IEEE745 ~ IEEE754

默认值是 0.0d;

包装类型(reference type):

Double

大于64位

java未提供大于64位浮动数的原始类型,但是在Java类库中提供了包装类型BigDecimal(java.math.BigDecimal)

 

货币单位建议使用java类库提供的包装类型BigDecimal

MYSQL数据库选择decimal类型,注意默认值 一定写成0.00, 不要用默认的NULL, 否则在进行加减排序等操作时, 会带来转换的麻烦!

4. 字符型:

原始类型(primitive type):

char

说明:char类型是一个单一的 16 位 Unicode 字符

值范围:Unicode 0 ~ Unicode 2^16 

默认值:\u0000 (Unicode 0)

包装类型(reference type):

Character(java.lang.Character)

5. 字符串类型:

 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

String实例的值是通过字符数组实现字符串存储的。

 7. 数据类型小实验

浮点数为什么不能用来表示货币?

注:根本原因是:十进制值通常没有完全相同的二进制表示形式;十进制数的二进制表示形式可能不精确。只能无限接近于那个值.

8. 参考文档:

https://www.runoob.com/java/java-basic-datatypes.html

java一个对象占用多少字节?

https://blog.csdn.net/zzx410527/article/details/93646925?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-6.channel_param

java 中 BigDecimal 详解

https://blog.csdn.net/qq_35868412/article/details/89029288

BigInteger:

https://www.liaoxuefeng.com/wiki/1252599548343744/1279767986831393

深入理解Java String类

https://blog.csdn.net/ifwinds/article/details/80849184

posted on 2020-10-08 23:51  eagle.supper  阅读(141)  评论(0编辑  收藏  举报