今天的博客主题

       Java编程基础 ——》Java数据类型


数据类型就是指数据的类型。

Java是强类型语言,所以Java对数据类型的规范相对的严格些。

Java数据类型分两种:基本数据类型引用数据类型

 

基本数据类型

在程序设计中经常会用到一系列的类型,需要特殊对待。

对于这些类型Java就不使用new关键字来创建变量,而是创建一个并非引用的自动变量,这个变量直接存储值,至于堆栈中,因此更加高效。因为new将对象存在堆里,如果用new来创建,对这些小的,简单的变量不是很有效。所以就出现了基本数据类型,不用new,直接存储。

 

Java要确定基本数据类型所占存储空间的大小。

这些大小不像其他语言随机器硬件架构的变化而变化。

这种所占存储空间大小的不变性是Java程序比其他大多语言编写程序更具可移植性的原因之一

所以说Java是强类型的语言。

Java中的数据类型分为字符型和非字符型,共8种

字符型:字节型(byte)和字符型(char)

非字符型里又分了数字类型和非数字类型

数字类型:整型(int)短整型(short)长整型(long)浮点型(float)双精度型(double)

非数字类型:布尔型(boolean)

这些就是Java八大基本数据类型,每种数据类型都有它的边界,无需强制记。

不同的类型变量在内存中分配的字节数不同,存储方式也是不同。

所以在给变量赋值前需要先确定变量的类型,确定了变量的类型,也就确定了数据需分配内存空间的大小,数据在内存的存储方式。

存储的原理:上面也提了基本数据类型都是直接存储在内存中栈空间里面的。

Java数据类型是存储模型,不存在引用的概念。对象才存在引用的概念。

基本数据类型具有包装器类,使的可以在堆中创建一个非基本对象,用来表示对应的基本类型。

也叫包装数据类型,可以看做是对基本数据类型的封装。

 

基本类型

大小

最小值

最大值

包装类型

byte

8 bits

-128

+127

Byte

char

16 bits

Unicode o

Unicode 2^16-1

Character

int

32 bits

-2^31

+2^31-1

Integer

short

16 bits

-2^15

+2^15-1

Short

long

64 bits

-2^63

+2^63-1

Long

float

32 bits

IEEE754

IEEE754

Float

double

64 bits

IEEE754

IEEE754

Double

boolean

——

——

——

Boolean

boolean类型所占存储空间没有明确定义,因为只有两个值true和false

 

基本数据类型定义使用

// 先定义(声明)在赋值
int i;
i = 99;
// 在定义的同时并赋值
int i = 88;
// 同时定义多个
int a,b,c,d;
// 同时定义多个并赋值
int a = 1, b = 2, c = 3, d = 4;
// 同时定义多个某些赋值
int a = 1, b, c, d = 4;

以上定义声明变量适用于所有基本数据类型

值得注意的是:

// byte类型赋值时,必须使用单引号,因为它只能存放一个字节的东西
// 所输出的是所放数据的阿斯科码(ascii)
byte b = 'a';
// char类型赋值时,也必须用单引号,只能放一个字母或汉字
char c = 'a';
char cc = '中';
// 在定义long、float、double类型数据的时候,数值后必须加类型首字母小写
long a = 1234l;
float b = 12.34f;
double c = 12.34567d;

基本数据类型之间的转换

这些数据类型都是可以相互转换的,因为这是Java允许的。除boolean类型外

低转高:byte,char,short ---》int ---》long ---》float ---》double

想转就转,无需强制,不会损失

int i = 987; double b = i;

高转低:必须强转,可能会损失精度

double a = 12.3456; int i = (int) a; // 这里转换会进行截尾,即丢失。

包装数据类型

包装数据类型是对基本数据类型的封装。

待补充

 

引用数据类型

引用数据类型有:类、接口、数组

类可以是Java提供好的,比如String、Date、Random等。也可以是自己创建的Java类,按照类的定义标准,在类中包含多个方法与属性,提供使用。

也可以这么说,在Java中除了基本数据类型,其他的都属于引用数据类型。

接口为什么是引用数据类型?

两种数据类型的区别

基本数据类型

引用数据类型

创建时被分配到栈空间当中

创建时先在栈上给其引用(句柄)分配一块内存,对象的具体信息存储在堆内存上,由栈上面的引用指向堆中对象的地址。栈的读写速度要比堆快。

变量名指向具体的数值

变量名指向存储数据对象的内存地址。

变量声明之后Java立刻分配内存给它

以特殊的方式指向对象实体(具体的值),声明时不分配内存,只存储内存地址。

基本类型之间的赋值就是创建新的拷贝

对象之间赋值只是传递引用

== 和 != 是比较数值

== 和 != 是比较内存地址。如果比较数值,则需要需要重写对象equals()方法

创建和销毁都会很快

需要JVM销毁

高精度数字

Java提供了用于高精度计算的类:BigInteger 和 BigDecimal 大体上是属于包装类器的范围,却都没有对应的基本数据类型。

不过。这两个类包含的方法,提供的操作与对基本数据类型所能执行的操作相似,也就是说能作用于int 或 float 的操作,同样也能作用于自己,只不过得以方法的方式来取代运算符方式来实现。

这样做会复杂了许多,速度会慢些,但是换来的却是精度。

用速度换精度。

BigInteger支持任意精度的整数,在运算中,可以准确的表达任何大小的数值,不会丢失任何信息。

BigDecimal支持任何精度的定点数。比如,用来做货币的计算。

至于具体的使用,自行查询文档或姑哥度娘。