JAVA基础(一)——基本数据类型

JAVA基本数据类型
在生活中,使用的数据有大有小,有整数,也有小数,同时也会使用字母,或者汉字表示特定含义。在Java中根据数据的不同特点,数据也分为不同的类型。 Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配 了不同大小的内存空间。

JAVA基础(一)——基本数据类型
JAVA基础(一)——基本数据类型

1.数据类型详细介绍

(1)整数类型(byte、short、int、long)
虽然byte、short、int、long 数据类型都是表示整数的,但是它们的取值范围不一样。
①byte 的取值范围:-128~127(-2的7次方到2的7次方-1)
②short 的取值范围:-32768~32767(-2的15次方到2的15次方-1)
③int 的取值范围:-2147483648~2147483647(-2的31次方到2的31次方-1)
④long 的取值范围:-9223372036854774808~9223372036854774807(-2的63次方到2的63次方-1)
Java各整数类型有固定的取值范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性。
综上可以看出 byte、short 的取值范围比较小,而long的取值范围是最大的,所以占用的空间也是最多的。int 取值范围基本上可以满足我们的日常计算需求了,所以 int 也是我们使用最多的一个整型类型,Java语言整型常量默认为int型,声明long型常量后面需加" L "或 " l "。

(2)浮点型(float、double)
float 和 double 都是表示浮点型的数据类型,它们之间的区别在于精确度的不同。Java语言浮点类型常量默认为double型
①float(单精度浮点型)的取值范围: -3.40E+38 ~ +3.40E+38(e+38 表示乘以10的38次方)
②double(双精度浮点型)的取值范围:-1.79E+308 ~ +1.79E+308
double 类型比float 类型存储范围更大,精度更高。通常的浮点型数据在不声明的情况下都是double型的,如果要表示一个数据是float 型的,则需在数据后面加上 " F "或 " f " 。浮点型的数据是不能完全精确的,有时候在计算时可能出现小数点最后几位出现浮动,这是正常的。

(3)字符型(char)
char型数据用来表示通常意义上得“字符”,char的取值范围:0~ 65535
char 有以下的初始化方式:
①字符常量为用单引号括起来的单个字符,例如char ch =’ a '; char ch = ’ 中 ‘; // 可以是汉字,因为是Unicode编码。
②char ch = 1010; // 可以是十进制数、八进制数、十六进制数等等。
③char ch = ’ \0 ‘; // 可以用字符编码来初始化,如:’\0’ 表示结束符,它的ASCll码是0,这句话的意思和 ch = 0 是一个意思。
Java是用Unicode 来表示字符,“中” 这个中文字符的Unicode 就是两个字节。通常gbk / gb2312 是两个字节,utf-8 是3个字节。

(4)布尔型(boolean)
boolean类型通常用于逻辑运算和程序流程控制。
boolean的取值就两个:true 、false 。不可以0或非0的整数替代true和false,这点和C语言不同。

2.基本类型之间的转换

将一种类型的值赋值给另一种类型是很常见的。在Java中,boolean 类型与其他7种类型的数据都不能进行转换。但对于其他7种数据类型,它们之间都可以进行转换,只是可能会存在精度损失或其他一些变化。
转换分为自动转换和强制转换:①自动转换(隐式):无需任何操作;
②强制转换(显式):需使用转换操作符(type)。
7种数据类型顺序排列:double > float > long > int > char,short , byte;
(byte,short,char之间不会相互转换,他们在计算时首先会转换为int类型。)
如果从小转换到大,那么可以直接转换,而从大到小,或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
(strictfp, 即 strict float point (精确浮点))
除了可能的精度损失外,自动转换不会出现任何运行时(run-time)异常。

byte b = 2; //会自动把int类型2转为byte类型存放在b空间
short s =234; //也会把int类型234转为short类型存放在s空间
当把一个int类型的数据存放在char类型空间中时,也会发生隐式类型转换
char ch = 65; //这里会用int类型65,到编码表中查找对应的字符,然后将字符 存放在ch空间中 char ch2 = ‘A’; //直接将A字符存放在ch2空间中
注意:当把超过byte和short范围的数据给他们开辟空间存放会发生编译时错误。同样把无法在编码表中查到对应字符的数据存放到char空间也会报错。

2、强制类型转换
如果要把大的转成小的,或者在short与char之间进行转换,就必须强制转换,也被称作缩小转换(narrowing conversion),要加上强制转换符,但可能造成精度的 降低或溢出,使用时要格外注意,因为必须显式地使数值更小以适应目标类型。
强制转换格式:
(数据类型)(被转数据);
long l = 123L;
int i = (int) l;
double d = 3.14;
float f = (float) d;