JavaSE(1)——基本数据类型和引用数据类型

java的数据类型

java中数据类型分为两类,一类是基本数据类型,一类是引用数据类型

基本数据类型

java中一共有八种基本类型,其中有4种整型,两种浮点型,一种字符类型和一种存储真值的boolean类型

1. 整型(byte,short,int,long)
数据类型存储位数取值范围
byte1字节-128~127(±2的7次方)
short2字节-32768~32767(±2的15次方)
int4字节-2147483648~2147483647(±2的31次方,正好超过20亿)
long8字节-9223372036854775808~9223392036854775807(±2的63次方,20亿的平方*2)

通常情况下,int类型最为常用,但如果在表示超过20亿的数值时,则选取long类型,例如表示地球上的人口数。short和byte类型只在特殊情景下使用,java中的整型数的范围与运行java的机器无关。

注:java中,没有任何无符号数据类型

long类型的数有一个后缀L或l,十六进制数前缀为0x或0X,八进制前缀为0,因此八进制数容易混淆,不推荐使用。在java7开始,使用0b或者0B可以表示二进制数。并且从java7开始,可以给数字的字面量加上下划线,从而达到方便阅读的效果,如一百万可以写作100_0000 ,下划线会被java编译器去除。

2. 浮点型(float,double)
数据类型存储位数取值范围
float4字节大约±3.40282347E+38F(有效位数为6~7位)
double8字节大约±1.79769313486231570E+308(有效位数为15位)

double类型,也被称为双精度,是指它的精度是float的两倍,大多数情况下,使用小数时使用double类型而非float类型,float类型的精度很难满足需求,只有很少的情况下才使用float类型。

浮点数组不适用于无法接受舍入误差的金融计算中,比如在程序中计算2.0-1.1,输出的结果为0.89999999而非0.9,这也是因为浮点数的计算机制导致的,二进制无法精确的表示0.1,因此会出现误差。在这样的计算中,应当使用没有舍入以及误差的BigDecimal类型。

3. 字符类型(char)

char类型原本用于表示单个字符,不过,现在有些Unicode字符占一个char值,有些占两个char值。

通常来说,char类型仅表示原先的单个字符,比如英文字母A的编码值为65,它不同于"A",'A’是char类型的字面量,而"A"是指包含一个A的字符串的字面量。

特殊的转义字符也属于char类型,比如\n,\t,\r,\’,\",\\等都属于转义字符

4. 布尔类型(boolean)

boolean类型占一个字节,有两个值,true和false,用来判定逻辑条件,整型值和布尔类型值之间不能进行转换。

引用数据类型

java中,引用数据类型只有三种,分别是类(Class)、接口(Interface)和数组([])

Java把内存分成两种,一种叫做栈内存,一种叫做堆内存。

在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。

堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名。

引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。

而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放,数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因,实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针!

基本数据类型和引用数据类型的异同

异: 在作为函数的参数传递时,如果传递的是基本数据类型,则对函数内部的基本数据进行修改不会影响函数外的基本数据。而如果传递的是引用数据类型,则对传递的引用数据进行修改,函数外的引用数据也会随之发生改变。

同: 基本数据类型的变量和引用数据类型的变量,两者都存储在栈内存中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值