目录
数据类型
Java中数据类型分为基本数据类型和引用数据类型。
1.基本数据类型
基本数据类型分为四类:整型(byte,short,int,long),浮点型(float,double),字符型(char),布尔型(boolean)
数据类型 关键字 内存占用 范围 包装类型 默认值 字节型 byte 1字节 -128~127 Byte 0 短整型 short 2字节 -32768~32767 Short 0 整型 int 4字节 -2^31~2^31-1 Integer 0 长整型 long 8字节 -2^63~2^63-1 Long 0L 单精度浮点型 float 4字节 一般不关注Float 0.0f 双精度浮点型 double 8字节 一般不关注Double 0.0d 字符型 char 2字节 0~65535 Character ‘u0000’ 布尔型 boolean 没有明确规定 true和flase Boolean flase 注意:
1.Java中数据类型所占内存大小不分32位还是64位。
2.在字面常量中整型默认为 int,浮点型默认为 double;整型后面加上 L 或 l 为 long,浮点型后面加上 F 或 f 为 float 。
3.使用变量前需初始化,初始化的值不能超过对应类型的表示范围
4.Java中 char 类型是一个单一的 16 位 Unicode 字符(表示的字符种类比Ascall更多)
我们可以通过包装类获取对应类型的信息:
public class Test { public static void main(String[] args) { // 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"); System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE); System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE); } }
打印结果如下:
2.引用数据类型
Java中引用数据类型是一种内部类型,是对所用自定义类型和数组引用的统称,并非特指某种类型。引用数据类型分为3种:类,接口,数组;他们的默认值均为null。
类型转换
数据类型转换必须满足如下规则:
1. 不能对boolean类型进行类型转换。
2. 不能把对象类型转换成不相关类的对象。
3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
4. 转换过程中可能导致溢出或损失精度
1.自动类型转换
代码不需要经过任何处理,在代码编译时,编译器会自动进行处理 。特点: 数据范围小的转为数据范围大的 时会自动进行 。System.Out.println(1024); // 整型默认情况下是int System.Out.println(3.14); // 浮点型默认情况下是double int a = 100; long b = 10L; b = a; /* a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值*/ a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全 byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失
2.强制类型转换
当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。int a = 10; long b = 100L; b = a; // int-->long,数据范围由小到大,隐式转换 a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败 byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换 byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错 boolean flag = true; a = flag; // 编译失败:类型不兼容 flag = a; // 编译失败:类型不兼容
3.类型提升
1. 不同类型的数据混合运算 , 范围小的会提升成范围大的 .int a = 10; long b = 20; int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据 long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long
2. 对于 short, byte 这种比 4 个字节小的类型 , 会先提升成 4 个字节的 int , 再运算byte a = 10; byte b = 20; byte c = a + b; System.out.println(c); /*编译报错:byte 和 byte 都是相同类型, 但是出现编译报错. 原因是, 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int,这时赋给c就会出错*/