java不支持 不同类型之间操作数的运算所以在编译的时候,所有的不同类型之间的操作数,必须进行同类型的转换之后才能运行,编译器来完成这个工作。
算数运算时的转换
类型转换的规则
- 如果多个操作数的类型是 byte short int char 那么进行运算的时候,所有的类型都自动转换为 int 然后再运行。
- 如果多个操作数的类型是 byte short int char而且有 long 那么进行运算的时候,所有的类型都自动转换为 long 然后再运行。
- 如果多个操作数的类型是 byte short int char long 而且有 float那么进行运算的时候,所有的类型都自动转换为 float 然后再运行。
- 如果多个操作数的类型是 byte short int char long float 而且有 double 那么进行运算的时候,所有的类型都自动转换为 double 然后再运行。
在Java中,boolean类型与所有其他7种类型都不能进行转换,这一点很明确。对于其他7中数值类型,它们之间都可以进行转换,但是可能会存在精度损失或者其他一些变化。转换分为自动转换和强制转换。对于自动转换(隐式),无需任何操作,而强制类型转换需要显式转换,即使用转换操作符(type)。首先将7种类型按下面顺序排列一下:
byte <(short=char)< int < long < float < double
如果从小转换到大,可以自动完成,而从大到小,必须强制转换。short和char两种相同类型也必须强制转换
赋值时的转换
基本规则
- 左值 变量类型只要大于等于右值表达式的返回值的类型即可
类型自动转换图
强制类型转换
通常希望将一个类型的数据转换为一个小类型的数据,需要将类型强制转换为小类型的数据
(强制转换类型)(操作数)
2. 复合运算符-----自带强制类型转换
练习
1.得到一个随机字符【A-Z】or【a-z】(大小也要随机)并打印出来。
import java.util.Random;
public class Test{
public static void main (String[] args){
//先随机得到一个大写字符
final char MIN='A';
final char MAX='Z'+1;
char randomChar=(char)(Math.random()*(MAX-MIN)+MIN);
System.out.println("随机的大写字符"+randomChar);
//随机大小写
Random random =new Random();
boolean isUpperCase=random.nextBoolean();
char resultChar=(char)(isUpperCase?randomChar:randomChar+32);
System.out.println("随机的字符:"+resultChar);
}
}