基本数据类型
Java中基本的数据类型分为4大类,共8中数据类型
- 整数类型:byte、short、int、long
- 浮点类型:float、double
- 字符类型:char
- 布尔类型:boolean
整数,浮点,字符类型都属于数值类型,可以互相转换
1、整型类型
java中四种整型类型之间的区别仅仅只是宽度和范围上的不同。Java中的数据类型是跨平台的(与运行在那种平台无关),无论计算机是32位还是64位的,byte类型整数都是占一个字节(8位)。
Java中整型类型默认是int类型。 long类型需要在数值后边加上大写或者小写的英文字母L(推荐使用大写,防止小写与数字1混淆)
2、浮点类型
浮点类型主要用于存储小数数值,也可以用来存放数值较大的整数,分为浮点数(float)和双精度浮点数(double)两种,双精度浮点数所使用的内存空间比浮点数多,可表示的数值范围和精度也比浮点数大。
Java中浮点类型默认是double类型,例如0.0表示的是double常量,而不是float类型,要想表示float类型,需要在数值后边加上F或者f。double类型数据后边也可以加上D或者d来表示double浮点数
3、数字表示方式
如果为一个整数变量赋值,使用二进制数、八进制数和十六进制数表示,它们的表示方式分别如下:
二进制数:以 0b 或0B为前缀,注意0是阿拉伯数字,不要误认为是英文字母o。
八进制数:以0为前缀,注意0是阿拉伯数字。
十六进制数:以 0x 或0X为前缀,注意0是阿拉伯数字。
例如下面几条语句都是表示int整数28。
int decimalInt = 28;
int binaryInt1 = 0b11100;
int binaryInt2 = 0B11100;
int octalInt = 034;
int hexadecimalInt1 = 0x1C;
int hexadecimalInt2 = 0X1C;
4、字符类型 Java中char声明字符类型,表示单个字符,在使用时字符需要使用单引号括起来。
char c = 'A';
Java字符采用双字节Unicode编码,占两个字节(16位),因而可用十六进制(无符号的)编码形式表示,它们的表现形式是\un,其中n为16位十六进制数,所以'A'字符也可以用Unicode编码'\u0041'表示
char c1 = 'A'; A
char c2 = '\u0041'; A
char c3 = '花'; 花
字符类型也属于是数值类型,可以与int等数值类型进行数学计算或进行转换。这是因为字符类型在计算机中保存的是Unicode编码,双字节Unicode的存储范围在\u0000~\uFFFF,所以char类型取值范围0~216-1。
为了表示一些特殊字符,前面要加上反斜杠(\),这称为字符转义。
5、布尔类型
Java中声明布尔类型的关键字是boolean,只用两个值true/false。
在C语言中布尔类型是数值类型,它有两个取值:1和0。而在Java中的布尔类型取值不能用1和0替代,也不属于数值类型,不能与int等数值类型之间进行数学计算或类型转化。
6、数值类型相互转换
基本数据类型中数值类型之间可以互相转换,布尔类型不能与它们之间进行转换。但有些不兼容类型之间,如String(字符串)转换为int整数等,可以借助于一些类的方法实现。
自动转换类型:小范围数据类型可以自动转换为大范围数据类型
自动类型转换不仅发生在赋值过程中,在进行数学计算时也会发生自动类型转换,在运算中往往是先将数据类型转换为同一类型,然后再进行计算
//int型变量
int i = 10;
float c1 = i / 3; 3.0
//把int变量i强制转换为float
float c2 = (float)i / 3; 3.333333
在进行强制转换时,需要注意计算过程中精度丢失问题,最好是现将需要计算的数值转换成目标精度再进行计算
long yourNumber = 6666666666L; 6666666666
int myNuber = (int)yourNumber; -1923267926
经过强制类型转换后,原本的6666666666L变成了负数。当大宽度数值转换为小宽度数值时,大宽度数值的高位被截掉,这样就会导致数据精度丢失。除非大宽度数值的高位没有数据,就是这个数比较小的情况,例如将6666666666L换为6L就不会丢失精度。
7、引用数据类型
在Java中除了8种基本数据类型外,其他数据类型全部都是引用(reference)数据类型,引用数据类型用了表示复杂数据类型,包含:类、接口和数组声明的数据类型。
int x = 7; ①
int y = x; ②
String str1 = "Hello"; ③
String str2 = str1; ④
str2 = "World"; ⑤
上段代码中,两个基本数据类型,两个引用数据类型,1、2代码将7赋值给x,将x赋值给y,此时两个变量值都为7,并互不影响。
当程序执行完第③行时,字符串“Hello”对象被创建,保持到内存地址0x12345678中,str1是引用类型变量,它保存的是内存地址0x12345678,这个地址指向“Hello”对象。
当程序执行完第④行时,str1变量内容(0x12345678)被赋值给str2是引用类型变量,这样一来str1和str2保存了相同的内存地址,都指向“Hello”对象。见图5-4所示,此时str1和str2本质上是引用一个对象,通过任何一个引用都可以修改对象本身。