数据类型有什么用?数据类型用来声明变量,程序在执行过程中,根据不同的数据类型中配不同的大小空间。
数据类型在Java语言分为基础数据类型和引用数据类型两种:
-
第一种:基础数据类型
基本数据类型又划分为四大类和八小种:
- 第一类:整数型
(byte short int long)
- 第二类:浮点型
(float double)
- 第三类:布尔型
(boolean)
- 第四类:字符型
(char)
8小种:
byte、short、int、long、float、double、char
- 第一类:整数型
数据名称 | 占用内存 | 取值范围 |
---|---|---|
字节型 byte | 1字节 | [-128 ~ 127] |
短整型 short | 2个字节 | [-32768 ~ 32767] |
整形 int | 4个字节 | [-2147483648 ~ 2147483647] |
长整形 long | 8个字节 | [-9223372036854775808L ~ 9223372036854775807L] |
单精度浮点型 float | 4个字节 | +/-3.4E+38F(6~7 个有效位) |
双精度浮点型 double | 8个字节 | +/-1.8E+308 (15 个有效位) |
字符型 char | 2个字节 | ISO 单一字符集(可以表示65536个不同的数字) |
布尔型 boolean | 1字节 | true 或 false |
注意:
1ong类型占用8个字节,float类型占用4个字节,double类型占用8个字节,但是他们的空间大小关系是:double > float > long
任意一个浮点型逗比整数型空间大
- 第二种:引用数据类型
引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。
- 而字符串型
String
,不属于基本数据类型,属于引用数据类型。 - Java中除了基本数据类型之外都是引用数据类型。
- 小容量可以直接赋值的大容量,称为自动类型转换。
- 大容量不能赋值给小容量,需要使用强制类型转换进行强转。但是需要注意的是:强制类型转换之后,给你通过,但是可能会造成运行时的精度损失。
3.6.1、整数类型
不包含小数的数据被称为整数型数据,其中整数型变量有: byte short int long
在任何情况下,整数型“字面量/数据”默认被当做int类型处理。
如果希望该“整数型字面量”被当做long类型来处理,需要在“字面量”后面添加L/l,建议使用大写L,因为小写1和l有点难区分。
当这个整数型字面量没有超过byte或者short的取值范围,那么这个整数型字面量可以直接赋值给byte类型的变量,不用使用强制类型转换符。
这种语法机制是为了方便写代码而存在的。
正常赋值:
public static void main(String[] args) {
byte b = 100;
short s = 100;
int i = 100;
long l = 100L;
}
自动类型转换:
// b变量是long类型,int默认占四个字节,long类型占8个字节
// 小容量可以自动转换成大容量,这种操作被称为:自动类型转换
long b = 200;
long d = 214783647;
// 不存在类型转换
int a = 100;
long l = 100L;
// long e = 2147483648; // 错误: 过大的整数
// 不管在什么情况下,整数型字面量都会被当作int类型来处理。
// 而且2147483648已经超出int的范围,你们在没有赋值之前就出错了。
// 记住:不是e放不下2147483648,e是long类型,完全可以容纳2147483648
// 不过2147483648本身已经超过int的范围。
// 解决问题。
long e = 2147483648L;
强制类型转换:
long x = 100L;
// x是long类型,占用8个字节,而y变量时int类型,占用4个字节
// 在Java中,大容量可以直接赋值给小容量吗?不可以
// 错误: 不兼容的类型: 从long转换到int可能会有损失
// int y = x;
大容量转换成小容量,要想编译通过,必须加强制类型转换符,进行强制类型转换。那么底层是怎么进行强制类型转换的?
// long类型100L:00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100100
// 以上的long类型100L强制转换成为int类型,会自动将前面的4个字节砍掉:00000000 00000000 00000000 00000000
// int 00000000 00000000 00000000 00000000 00100100
int y = (int) x; // 这个 (int) 就是强制类型转换符,加上去就能编译通过。但是要记住:编译虽然通过了,但是运行时可能损失精度。
// 大容量转化成小容量。
// 300 00000000 00000000 00000001 00101100
// 44 00101100
byte byte01 = (byte) 300;
System.out.println(byte01);
3.6.2、浮点类型
带有小数部分的数据被称为浮点型数据,Java中浮点型数据分为单精度浮点型 float
和 双精度浮点型 double
,表示有小数精度要求的数据。
带有小数运算的一般都会使用这两个,但是注意的是,如果用在银行方面或者说使用在财务方面,double也是远远不够的,需要要使用精度更高的引用类型:Java.math.BigDecimal
public static void main(String[] args) {
// 任何小数默认都会被当做double,所以定义float时需要在小数后面加上F/f,建议使用大写F
// float numOne = 3.1415826f;
float numOne = 3.1415826F;
double numTwo = 3.1415826;
}
3.6.3、字符类型
Java 语言中的字符类型(char)使用两个字节的 Unicode 编码表示,它支持世界上所有语言,可以使用单引号字符或者整数对 char 型赋值
当一个整数赋值给char类型变量的时候,会自动转换成char字符型,最终的结果是一个字符。
当一个整数没有超出byte short char的取值范围的时候,这个整数可以直接赋值给byte short char类型的变量。
class CharDataType {
public static void main(String[] args) {
// char可以存储一个汉字吗?
// 可以的,汉字占用2个字节,Java中的char类型占用2个字节,正好。
char cc1 = '中';
char cc2 = 'a';
char cc3 = '0';
// 错误: 不兼容的类型
// char c4 = "a";
// 错误: 未结束的字符文字
// char c5 = 'ab';
// 普通的 't' 字符
char c1 = 't';
// System.out.println(c1);
// 经过测试以下代码 \t 实际上是一个字符,不属于字符串,两个字符合在一起表示一个字符, 其中 \t 表示“制表符Tab”
char c2 = '\t';
// System.out.println(c2);
// System.out.println("ajdfgashjdghja");
// System.out.println("ajdfgashtjdghja");
// System.out.println("ajdfgash\tjdghja");
// 想在控制台输出一个 \ 字符怎么办?
// System.out.println('\\');
// System.out.println("\"Test\"");
// 想在控制台输出一个 ' 字符怎么办?
// System.out.println('\'');
// \\u 表示后面是一个字符的Unicode编码
// Unicode编码是一个十六进制编码
char c3 = '\u4e2d';
// System.out.println(c3);
// 整数型没有超过范围可以直接赋值给char
char char01 = 'a';
// 这里会做类型转换吗?
// 97是int类型(这是Java中规定,默认当做int处理)
// c2是char类型
char char02 = 97;
System.out.println(char02); // 'a'
char char03 = 65535;
System.out.println(char03); // 控制台输出乱码
}
}
注意:JDK8的安装目录下bin下面有一个 native2ascii.exe
命令,在控制台运行可以快速把中文转换成为 Unicode
编码
3.5.4、布尔类型
布尔类型对象可以被赋予文字值 true
或者 false
,所对应的关系就是真与假的概念。
在 Java
语言中 Boolean
类型只有两个值,没有其他值:true
和 false
,不像C++或者C,C语言中1和0也可以表示布尔类型。
在 Java
中布尔类型不能转换成为任何数据类型。
boolean
使用在逻辑判断当中,通常放到条件的位置上(充当条件)
public static void main(String[] args) {
boolean sexOne = true;
boolean sexTwo = false;
}
原创博主:Little Tomcat
博主原文链接:https://mp.weixin.qq.com/s/6X4ae_5MO5gFvoYJtXdlrw