java原⼦数据类型,Java学习笔记—数据类型
数据类型
基本数据类型
基本数据类型是CPU可以直接进⾏运算的类型,是指不可再分割的原⼦数据类型,内存中直接存储此类型的值,通过内存地址就可以访问到数据,并且内存中只能存放这种类型的值。
Java定义了以下⼏种基本数据类型:
整数类型:byte、short、int、long
浮点数类型:float、double
字符类型:char
布尔类型:boolean
在理解基本数据类型区别前,先了解⼀下计算机内存基本结构:
计算机内存最⼩存储单元是字节(byte),⼀个字节就是8位⼆进制数,即8bit。它的表⽰范围从00000000~11111111,换算成⼗进制为0~255,换成⼗六进制为00~ff。
内存单元是从0开始编号,称之为内存地址。每个内存单元可以看作⼀间房间,内存地址就是房间号。
⼀个字节是1byte,1K=1024byte,1M=1024K,1G=1024M,1T=1024G。
不同的数据类型占⽤的字节数不⼀样。请看下图:
byte正好⼀个字节,⽽long和double是8个字节
整型
对于整型,Java中只定义了带符号的整型,因此,最⾼位的bit表⽰符号位(0表⽰整数,1表⽰负数)
byte: -128~127
short: -32768 ~ 32767
int: -2147483648 ~ 2147483647
long: -9223372036854775808 ~ 9223372036854775807
浮点类型
浮点类型的数就是⼩数,因为⼩数⽤科学计算法表⽰的时候,⼩数点是可以“浮动”,例如:1234.5表⽰成
浮点数事例如下:
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。
包装类型
包装类型的继承结构图:
⾃动装箱、拆箱
装箱、⾃动装箱
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
引⽤类型:⾯向对象世界中的引⽤变量(引⽤句柄),或者叫引⽤类型。
序号
类型名称
默认值
⼤⼩
最⼩值
最⼤值
包装类
缓存区间
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
4B
-2^31
2^31-1
Integer
-128~127
>java valueof

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。