java基本数据类型
java数据类型简述
1,Java是一种强类型语言,一共有8种基本类型,分别是4种整形、2种浮点型、1种字符类型char(用于表示Unicode编码的代码单元)和一种表示真假的boolean类型。 2,Java是面向对象语言,其概念为一切皆为对象,但基本数据类型算是个例外,基本数据类型大多是面向机器底层的类型,它是 “值” 而不是一个对象,它存放于“栈”中而不是存放于“堆”中,但Java一切皆为对象的概念不是说说而已,它为每一个基本数据类型都做了相应的包装类 ,我们日常使用中大多情况下都会使用着这些包装类:
一、Java四大数据类型分类
整形 类型 存储需求 默认值 取值范围 int 4字节 0 -2 147 483 648 ~ 2 147 483 647 short 2字节 0 -32 768 ~ 32 767 long 8字节 0.0l -9 223 372 036 854 775 808 ~ -9 223 372 036 854 775 807 byte 1字节 0 -128 ~ 127
详细介绍:
由上可以看出 byte、short 的取值范围比较小,而long的取值范围时最大的,所以占用的空间也是最多的。int 取值范围基本上可以满足我们的日常计算需求了,所以 int 也是我们使用的最多的一个整型类型。
浮点类型 类型 存储需求 默认值 取值范围 float 4字节 0.0f 大约 ±3.402 823 47E+38F double 8字节 0 大约 ±1.797 693 134 862 315 70E_308
详细介绍:
float 和 double 都是表示浮点型的数据类型,它们之间的区别在于精确度的不同。 double 类型比float 类型存储范围更大,精度更高。 通常的浮点型数据在不声明的情况下都是double型的,如果要表示一个数据时float 型的,可以在数据后面加上 “F” 。 浮点型的数据是不能完全精确的,有时候在计算时可能出现小数点最后几位出现浮动,这时正常的。
字符型 类型 存储需求 默认值 取值范围 char 2 \u0000(空格) 在Java中,char类型描述了UTF-16编码中的一个代码单元
详细介绍:
char 有以下的初始化方式: char ch = ‘a’; 可以是汉字,因为是Unicode编码 char ch = 1010; 可以是十进制数、八进制数、十六进制数等等。 char ch = ‘\0’; 可以用字符编码来初始化,如:’\0’ 表示结束符,它的ascll码是0,这句话的意思和 ch = 0 是一个意思。 Java是用unicode 来表示字符,“中” 这个中文字符的unicode 就是两个字节。 String.getBytes(encoding) 方法获取的是指定编码的byte数组表示。
布尔型 类型 存储需求 默认值 取值范围 boolean 可以使⽤用 1 bit 来存储 false booelan类型有且只有两个值:flase和true,用来判定逻辑条件。
详细介绍:
boolean 没有什么好说的,它的取值就两个:true 、false 。
包装类 基本数据类型 包装类 默认值 数据类型 boolean Boolean null 布尔型 char Character null 字符型 底层是char数组 String null 字符串 byte Byte null 整形 short Short null 整形 int Integer null 整形 long Long null 整形 float Float null 浮点型 float Double null 浮点型
详细介绍:
包装类就是一个对象,它存放于“堆”中。 数值型包装类都继承至Number,而字符型和布尔型继承至Object。 Java中的基本数据类型没有方法和属性,而包装类就是为了让这些拥有方法和属性,实现对象化交互。 基本数据和包装类之间的转换:
装箱:基本数据类型转换为包装类;
拆箱:包装类转换为基本数据类型。
基本数据类型和包装类的转换
通过包装类Integer.toString()将整型转换为字符串;
通过Integer.parseInt()将字符串转换为int类型;
通过Double.parseDouble();将字符串转换为double类型;
通过valueOf()方法把字符串转换为包装类然后通过自动拆箱。
包装类对象的初始值为null(是一个对象); Java中除了float和double的其他基本数据类型,都有常量池
二,基本类型之间的转换
将一种类型的值赋值给另一种类型是很常见的。在Java中,boolean 类型与其他7中类型的数据都不能进行转换,这一点很明确。但对于其他7种数据类型,它们之间都可以进行转换,只是可能会存在精度损失或其他一些变化。 转换分为自动转换和强制转换:
自动转换(隐式):无需任何操作。
强制转换(显式):需使用转换操作符(type)。
将6种数据类型按下面顺序排列一下:
double > float > long > int > short > byte
如果从小转换到大,那么可以直接转换,而从大到小,或char 和其他6种数据类型转换,则必须使用强制类型转换。
1、自动转换
自动转换时发生扩宽(widening conversion)。因为较大的类型(如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)异常。
强制类型转换
如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值更小以适应目标类型。强制转换采用转换操作符()。严格地说,将byte转为char不属于narrowing conversion),因为从byte到char的过程其实是byte–>int–>char,所以widening和narrowing都有。强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。强制转换格式如下:
(target-type) value;
2. 如果整数的值超出了byte所能表示的范围,结果将对byte类型的范围取余数。例如a=256超出了byte的[-128,127]的范围,所以将257除以byte的范围(256)取余数得到b=1;需要注意的是,当a=200时,此时除了256取余数应该为-56,而不是200。 3. 将浮点类型赋给整数类型的时候,会发生截尾(truncation)。也就是把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样将对目标类型的范围取余数。
7种基本类型转换总结如下图:
赋值及表达式中的类型转换
1,字面值赋值
在使用字面值对整数赋值的过程中,可以将int literal赋值给byte short char int,只要不超出范围。这个过程中的类型转换时自动完成的,但是如果你试图将long literal赋给byte,即使没有超出范围,也必须进行强制类型转换。例如 byte b = 10L;是错的,要进行强制转换。
2,表达式中的自动类型提升
除了赋值以外,表达式计算过程中也可能发生一些类型转换。在表达式中,类型提升规则如下:
所有byte/short/char都被提升为int。
如果有一个操作数为long,整个表达式提升为long。float和double情况也一样。
原文参考:
Java 基本数据类型 - 四类八种 Java包装类 - biu嘟 - 博客园