java四类八种_Java四类八种基本数据类型

Java基本数据类型

基本类型,或者叫做内置类型,是Java中不同于类的特殊类型。

Java中定义了四类八种基本数据类型:

布尔型:boolean

字符型:char

整数型:byte,short,int,long

浮点数型:float,double

数据类型

关键字

在内存中占用字节数

取值范围

默认值

布尔型

boolean

1

true,false

false

字符型

char

2

0~2^16-1

'\u0000'

字节型

byte

1

-128~127

0

短整型

short

2

-215~215-1

0

整型

int

4

-231~231-1

0

长整型

long

8

-263~263-1

0

单精度浮点型

float

4

1.4013E-45~ 3.4028E+38

0.0F

双精度浮点型

double

8

4.9E-324~1.7977E+308

0.0D

Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的“E+数字”表示E之前的数字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。

实例:

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

// byte

System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);

System.out.println("包装类:java.lang.Byte");

System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);

System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);

System.out.println();

// short

System.out.println("基本类型:short 二进制位数:" + Short.SIZE);

System.out.println("包装类:java.lang.Short");

System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);

System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);

System.out.println();

// int

System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);

System.out.println("包装类:java.lang.Integer");

System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);

System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);

System.out.println();

// long

System.out.println("基本类型:long 二进制位数:" + Long.SIZE);

System.out.println("包装类:java.lang.Long");

System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);

System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);

System.out.println();

// float

System.out.println("基本类型:float 二进制位数:" + Float.SIZE);

System.out.println("包装类:java.lang.Float");

System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);

System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);

System.out.println();

// double

System.out.println("基本类型:double 二进制位数:" + Double.SIZE);

System.out.println("包装类:java.lang.Double");

System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);

System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);

System.out.println();

// char

System.out.println("基本类型:char 二进制位数:" + Character.SIZE);

System.out.println("包装类:java.lang.Character");

// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台

System.out.println("最小值:Character.MIN_VALUE="+ (int) Character.MIN_VALUE);

// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台

System.out.println("最大值:Character.MAX_VALUE="+ (int) Character.MAX_VALUE);

}

}

结果:

基本类型:byte 二进制位数:8

包装类:java.lang.Byte

最小值:Byte.MIN_VALUE=-128

最大值:Byte.MAX_VALUE=127

基本类型:short 二进制位数:16

包装类:java.lang.Short

最小值:Short.MIN_VALUE=-32768

最大值:Short.MAX_VALUE=32767

基本类型:int 二进制位数:32

包装类:java.lang.Integer

最小值:Integer.MIN_VALUE=-2147483648

最大值:Integer.MAX_VALUE=2147483647

基本类型:long 二进制位数:64

包装类:java.lang.Long

最小值:Long.MIN_VALUE=-9223372036854775808

最大值:Long.MAX_VALUE=9223372036854775807

基本类型:float 二进制位数:32

包装类:java.lang.Float

最小值:Float.MIN_VALUE=1.4E-45

最大值:Float.MAX_VALUE=3.4028235E38

基本类型:double 二进制位数:64

包装类:java.lang.Double

最小值:Double.MIN_VALUE=4.9E-324

最大值:Double.MAX_VALUE=1.7976931348623157E308

基本类型:char 二进制位数:16

包装类:java.lang.Character

最小值:Character.MIN_VALUE=0

最大值:Character.MAX_VALUE=65535

装箱和拆箱

自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成Double,等等。反之就是自动拆箱。

原始类型:boolean,char,byte,short,int,long,float,double

封装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

基本类型之间的转换

将一种类型的值赋值给另一种类型是很常见的。在Java中,boolean类型与其他7种类型的数据都不能进行转换,这一点很明确。但对于其他7种数据类型,它们之间都可以进行转换,只是可能会存在精度损失或其他一些变化。

转换分为自动转换与强制转换:

自动转换(隐式):无需任何操作。

强制转换(显示):需使用转换操作符(type)。

将6种数据类型按下面顺序排列一下:

double>float>long>int>short>byte

如果从小转换到大,那么可以直接转换,而从大到小,或char和其他6种数据类型转换,则必须使用强制转换。

1、自动转换(JVM自动完成)

自动转换时发生扩宽。因为较大的类型(如int)要保存较小的类型(如byte),内存总是足够的,不需要强制转换。如果将字面值保存到byte、short、char、long的时候,也会自动进行类型转换。注意区别,此时从int(没有带L的整型字面值为int)到byte/short/char也是自动完成的,虽然它们都比int小。在自动类型转化中,除了以下几种情况可能会导致精度损失以外,其他的转换都不能出现精度丢失。

> int --> float

> long--> float

> long--> double

> float-->double without strictfp

除了可能的精度值损失外,自动转化不会出现任何运行时(run-time)异常

2、强制转换

如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换,因为必须显示地数值更小以适应目标类型。强制转换采用转换操作符()。严格地说, 将byte转为char不属于narrowing conversion) ,因为从byte到char的过程其实是byte-->int-->char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模发生变化。强制转换格式如下:

(target-type) value;

如果整数的值超出了type所能表示的范围,结果将对byte类型的范围取余数。例如a=256超出了byte的[-128,127]的范围,所以将257除以byte的范围(256)取余数得到b=1;需要注意的是,当a=200时,此时除了256取余数应该为-56,而不是200.

将浮点类型赋给整数类型的时候,会发生截尾,也就是把小数的部分去掉。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数。

不同类型的变量在相互赋值时,什么情况下需要进行强制类型转换?

范围大的->范围小、长->短、子类—>父类

赋值及表达式中的类型转换

字面值赋值

在使用字面值对整数赋值的过程中,可以将int litera赋值给byte short char int,只要不超出范围。这个过程的类型转换时自动完成的,但是如果你试图将long litera赋给byte,即使没有超出范围,也必须进行强制类型转换。

表达式中的自动类型提升

除了赋值以外,表达式计算过程中也可能发生一些类型转换。在表达式中,类型提升规则如下:

所有byte/short/char都被提升为int。

如果有一个操作数为long,整个表达式提升为long。float和double情况也一样

扩展知识点

Java是面向对象语言,其概念为一切皆为对象,但基本数据类型算是个例外哦,基本数据类型大多是面向机器底层的类型,它是 “值” 而不是一个对象,它存放于“栈”中而不是存放于“堆”中,但Java一切皆为对象的概念不是说说而已,它为每一个基本数据类型都做了相应的包装类,包装类就是一个对象,它存放于“堆”中。

在栈中可以直接分配内存的数据是基本数据类型。

引用数据类型:是数据的引用在栈中,但是他的对象在堆中。

java中默认的整数类型是int类型,如果要定义为float型,则要在数值后加上l或L;

默认的浮点型也是双精度浮点,如果要定义为float型,则要在数值后加上f或F。

一个英文字母或一个阿拉伯数字就是一个字符,占用一个字节

一个汉字就是两个字符,占用两个字节。

一个字节等于8位,一个字节等于256个数,就是-128到127一共256。

kB就是kBytes

Bytes就是“字节”的意思!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值