java 原子数据类型,Java学习笔记—数据类型

数据类型

基本数据类型

基本数据类型是CPU可以直接进行运算的类型,是指不可再分割的原子数据类型,内存中直接存储此类型的值,通过内存地址就可以访问到数据,并且内存中只能存放这种类型的值。

Java定义了以下几种基本数据类型:

整数类型:byte、short、int、long

浮点数类型:float、double

字符类型:char

布尔类型:boolean

在理解基本数据类型区别前,先了解一下计算机内存基本结构:

计算机内存最小存储单元是字节(byte),一个字节就是8位二进制数,即8bit。它的表示范围从00000000~11111111,换算成十进制为0~255,换成十六进制为00~ff。

内存单元是从0开始编号,称之为内存地址。每个内存单元可以看作一间房间,内存地址就是房间号。

71cfa69f1d0c333f2a2defdb2b2f39ce.png

一个字节是1byte,1K=1024byte,1M=1024K,1G=1024M,1T=1024G。

不同的数据类型占用的字节数不一样。请看下图:

f694a92da077deff3eee3be76e79c07f.png

byte正好一个字节,而long和double是8个字节

整型

对于整型,Java中只定义了带符号的整型,因此,最高位的bit表示符号位(0表示整数,1表示负数)

byte: -128~127

short: -32768 ~ 32767

int: -2147483648 ~ 2147483647

long: -9223372036854775808 ~ 9223372036854775807

浮点类型

浮点类型的数就是小数,因为小数用科学计算法表示的时候,小数点是可以“浮动”,例如:1234.5表示成

equation?tex=1.2345*10%5E3

浮点数事例如下:

float f1 = 3.14f;

float f2 = 3.14e38f; // 科学计数法表示的3.14x10^38

double d = 1.79e308;

double d2 = -1.79e308;

double d3 = 4.9e-324; // 科学计数法表示的4.9x10^-324

复制代码

对于float 类型,需要在后面添加f

浮点类型表示范围非常大,float 最大表示3.4x10^38 ,而double最大可表示 1.79x10^308

布尔类型

布尔类型boolean只有true和false两个值,布尔类型总是关系运算的计算结果:

Java语言对布尔类型的存储并没有做规定,因为理论上存储布尔类型只需要1 bit,但是通常JVM内部会把boolean表示为4字节整数。

字符类型

字符类型char表示一个字符。Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符。

注意char类型使用单引号',且仅有一个字符,要和双引号"的字符串类型区分开。

引用类型

除了以上8种基本类型外,都是引用类型。例如,引用类型最常用的就是String字符串:

String s = "hello";

复制代码

引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置。

引用类型分为两种数据类型:引用变量本身和引用指向的对象。为描述简单起见,把引用变量(Reference Variable)称为refvar,而指向的实际对象(Referred Object)称为refobj。

refvar是基本数据类型,它的默认值是null,存储refobj的首地址。

refvar 占用4B空间

refobj 无论多么小的对象占用的存储空间是12B(用于存储基本信息,称为对象头),但是由于存储空间分配必须是8B的倍数,所以初始分配的空间至少是16B。

包装类型

包装类型的继承结构图:

d87a91d49f3000078b0fd9cab3643a4f.png

自动装箱、拆箱

装箱、自动装箱

Integer i1 = new Integer(8);

Integer i2 = Integer.valueOf(8);

// 自动装箱

Integer i3 = 8;

复制代码

以上 3 种都可以进行转换,但在 Java 5 之前第 3 种方法是编译失败的,第 3 种方法也正是现在的自动装箱功能。另外,第一种构造器方法也不推荐使用了,已经标为废弃了。

自动拆箱

// 自动拆箱

int i4 = i3;

int i5 = i3.intValue();

复制代码

继续上面的例子,把 i3 赋值给 i4 就是实现的自动拆箱功能,自动装箱的原理就是调用包装类的 xxValue 方法,如 i5 中的 Integer 的 intValue 方法。

8种基本数据类型都有对应的包装类

包装类解决了基本数据类型无法做到的事情:泛型类型参数、序列化、类型转换、高频区间数据缓存。

所有包装类对象之间的比较,推荐全部使用equals()方法

在选择使用包装类还是基本数据类型时,推荐使用如下方式:

所有的POJO类属性必须使用包装类数据类型。

RPC方法的返回值和参数必须使用包装数据类型。

所有的局部变量推荐使用基本数据类型。

字符串

字符串是在堆上分配的

字符串相关类型主要有三种:String、StringBuilder、StringBuffer

String相关:

String是只读字符串,不可变(immutable)对象,对它的任何改动,其实都是创建一个新对象,再把引用指向新对象。

String对象赋值操作后,会在常量池中进行缓存,如果下次申请创建对象时,缓存中已经存在,则直接返回相应引用给创建者。

StringBuffer相关:

StringBuffer可以对原对象上进行修改,是线程安全的。

JDK5引入的StringBuilder和StringBuffer均继承自AbstractStringBuilder

StringBuilder相关:

StringBuilder是非线程安全的

继承自AbstractStringBuilder,该抽象类内部和String一样,也是以字符数组的形式存储字符串的。

String和StringBuffer:

基本字符串操作可以使用String相加,这样操作比较方便。

在循环语句中不推荐字符串直接相加操作,推荐使用StringBuilderd的append方法进行扩展。以下方式不推荐:

String str= "test";

for(int i=0;i<100;i++){

str = str + "hello";

}

复制代码

总结

Java的9种基本数据类型(8种基本类型+引用类型)

整型:byte、short、int、long

浮点型:float、double

布尔型:boolean

字符型:char

引用类型:面向对象世界中的引用变量(引用句柄),或者叫引用类型。

f694a92da077deff3eee3be76e79c07f.png

序号

类型名称

默认值

大小

最小值

最大值

包装类

缓存区间

1

boolean

false

1B

0(false)

1(true)

Boolean

2

byte

(byte)0

1B

-128

127

Byte

-128~127

3

char

'\u0000'

2B

'\u0000'

'\uFFFF'

Charactor

(char)0~(char)127

4

short

(short)0

2B

-2^15

2^15-1(32767)

Short

-128~127

5

int

0

4B

-2^31

2^31-1

Integer

-128~127

6

long

0L

8B

-2^63

2^63-1

Long

-128~127

7

float

0.0f

4B

1.4e-45

3.4e+38

Float

8

double

0.0d

8B

4.9e-324

1.798e+308

Double

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值