64位 java 数据类型_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 数据类型是8位、有符号的,以二进制补码表示的整数;

存储字长: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. 参考文档:

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

java 中 BigDecimal 详解

BigInteger:

深入理解Java String类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值