1.类型转换
1.1自动转换
范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为int
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
1.2强制转换
将取值范围大的类型强制转换成取值范围小的类型
格式转换:
数据类型 变量名 = (数据类型)被转数据值;
int i = (int)1.5;
1.3注意事项
浮点转成整数,直接取消小数点,可能造成数据损失精度;
int 强制转成short 砍掉2个字节,可能造成数据丢失;
// 定义s为short范围内最大值 short s = 32767; // 运算后,强制转换,砍掉2个字节后会出现不确定的结果 s = (short)(s + 10);
1.4ASCII码
public static void main(String[] args) { //字符类型变量 char c = 'a'; int i = 1; //字符类型和int类型计算 System.out.println(c+i);//输出结果是98 }
tips:在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升为了int类型。char类型内存2个字节,int类型内存4个字节;
0:48 9:57 A:65 Z:90 a:97 z:122
2.运算符
2.1混合运算:
变量前++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2;
public static void main(String[] args) { int a = 1; int b = ++a; System.out.println(a);//计算结果是2 System.out.println(b);//计算结果是2 }
变量后++ :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b的结果是1;
public static void main(String[] args) { int a = 1; int b = a++; System.out.println(a);//计算结果是2 System.out.println(b);//计算结果是1 }
2.2赋值运算
赋值运算符,就是将符号右边的值,赋给左边的变量;
2.3比较运算
比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值true 或者false;
2.4逻辑运算
逻辑运算符,是用来连接两个布尔类型结果的运算符,运算结果都是布尔值true 或者false;
2.5三元运算
格式:
数据类型 变量名 = 布尔类型表达式?结果1:结果2
三元运算符计算方式:
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量;
布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量;
3.方法
格式:
修饰符 返回值类型 方法名 (参数列表){ 代码... return ; }
3.1方法调用
将三元运算符代码抽取到自定义的方法中,并调用;
public static void main(String[] args) { //调用定义的方法operator operator(); } //定义方法,方法中定义三元运算符 public static void operator() { int i = 0; i = (1==2 ? 100:200); System.out.println(i); int j = 0 ; j = (3<=4 ? 500:600); System.out.println(j); }
3.2注意事项
方法必须定义在一类中方法外;
方法不能定义在另一个方法的里面;
3.3+=运算扩展
public static void main(String[] args){ short s = 1; s+=1; System.out.println(s); }分析: s += 1 逻辑上看作是s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围
大的类型赋值到取值范围小的类型。但是, s=s+1进行两次运算, += 是一个运算符,只运算一次,并带有强制转换的特点,
也就是说s += 1 就是s = (short)(s + 1) ,因此程序没有问题编译通过,运行结果是2;