数据类型的转换
要了解数据类型的转换,我们先要了解一些基本基本概念:
一、数据类型按基本类型分为:
2大类4小类8种
2大类: boolean和数值类型
4小类: boolean、整型、浮点型(实型)、字符型
8种:
boolean(java官方没有指出boolean类型到底占多少字节 所以我们不讨论)
1字节:byte
2字节:char、short
4字节:int、float
8字节:long、double
二、按引用类型分:
字符串、数组、类、接口、抽象类、枚举…
- boolean类型
boolean只能取值为true或false
- char类型
char c = ‘中’(此时“中”占两个字节)
char c = ‘a’(此时“a”占两个字节)
- 整型
byte、short、int、long(按表数范围从小到大排列)
注意的是:如果直接将一个较小的整数值(在 byte short 类型的表数范围内〉赋给 byte 或者short 变量系统会自动把这个整数值 byte 或者 short 类型来处理。
int类型
例子:int a = 1;
等号(=)左边称为左值
等号(=)右边称为右值
整型的右值默认为int型
转换分为宽转换和窄转换
宽转换: 表数范围小的值 赋值给表数范围大的数叫做宽转换
特点:安全的、自动的、不会发生精度丢失
窄转换: 表数范围大的赋值给表数范围小的叫做窄转换。
特点;不安全的、可能会发生精度丢失问题、编译不通过
例子:
long a =10; //宽转换
int b = a; //窄转换
可以把一个较小的整数值(在 int 类型的表数范围以 内)直接赋给一 个long 类型的变量,这并不是因为 Java 会把这个较小的整数值当成 long 类型来处理, Java 依然把这个整数值当成 int 类型来处理,只是因为 int 类型的值会自动类型转换到 long 类型。
- long类型
long b = 10L;
如果使用 个巨大的整数值(超出了 int 类型的表数范围)时 ,Java 不会自动把这个整数值当成
long 类型来处理。如果希望系统把 个整数值当成 long类型来处理,应在这个整数值后增加 l 或者 L作为后缀 。通常推荐使用 L,因为英文字母 l 很容易跟数字 1搞混
数据类型的提升
public class Test1{
public static void main(String args[]){
byte x = 10;
byte y = 20;
byte z = x + y;
System.out.println(z);
}
}
这个代码在编译的时候会报错,原因是byte short char 参与算数运算时会先提升成int
a+=2和a=a+2的区别
public class Test2{
public static void main(String args[]){
short a = 1;
//a+=2 和 a=a+2 是否一样
a+=2; // 可以直接给byte short char 赋值
a=a+2; // 表达式类型的自动提升 int + int = int ---->short 窄转换 可能会发生精度丢失
System.out.println("a=" + a);
}
}
这是因为使用a=a+2时,表达式的类型会自动提升,但是a+=2则不会
- 浮点型(实型):float、double
定义double:
浮点型的右值默认为double
double a = 3.14
定义float:
float a = 3.14f; 或者
float a = (flaot)3.14;
注意的是:java语言中的浮点类型默认是double类型,如果希望java把一个浮点类型的值当成float类型来处理,应在这个浮点类型值后紧跟f或者F,或者使用强制转换(flaot)