一、基本数据类型的转换
基本数据类型中,布尔值不可以参与基本数据类型转换。
转换方式有两种:自动类型转换和强制类型转换。
(一)自动类型转换
默认自动转换是从小到大的转换
- byte类型只要参与了运算,会自动转换为int类型
- short类型只要参与了运算,会自动转换为int类型
- char类型只要参与了运算,会自动转换为int类型
- 大类型参与运算,整个结果会变为大类型,大类型不能直接赋值给小类型,需要进行强制类型转换
byte、short、char——int——long——float——double(从小到大)
等号左边的数值类型需要大于右边,才可以自动转换
(二)强制类型转换
二、关系运算符
运算符 | 含义 | 范例 | 结果 |
== | 等于 | 5==6 | false |
!= | 不等于 | 5!=6 | true |
> | 大于 | 5>6 | false |
< | 小于 | 5<6 | true |
>= | 大于等于 | 5>=6 | false |
<= | 小于等于 | 5<=6 | true |
- =是赋值运算符,==是等于运算符
- 关系表达式的结果是布尔值
- >、<、>=、<=运算符只支持数值类型的数据比较
- ==、!=运算符支持所有数据类型的比较
- >、<、>=、<=运算符的优先级高于==、!=
(一)代码演示
package com.base.day03;
import java.util.Scanner;
public class Luck {
public static void main(String[] args) {
//创建输入对象
Scanner sc = new Scanner(System.in);
//从控制台接收数据
System.out.println("请输入4位会员卡号:");
int cardNum = sc.nextInt();
int summation = (cardNum % 10) + (cardNum %100 / 10) + (cardNum % 1000 / 100) + (cardNum / 1000) ;
System.out.println("会员卡号" + cardNum +"各位之和:" + summation);
boolean big = summation > 20 ;
System.out.println("是幸运用户吗?" + big);
}
}
(二)关于引用型数据类型的比较
- 比较内容是否相等时候,特别是String,必须要用equals
- 比较地址是否相等,用==
三、逻辑运算符
逻辑运算必须与关系运算一起使用
运算符 | 含义 | 运算规则 |
&& | 短路与 | 两个操作数都是true,结果才是true; 如果左边是false,右边的表达式不会进行运算 |
|| | 短路或 | 两个操作数一个是true,结果为true; 如果左边是true,右边的表达式不会进行运算 |
! | 逻辑非 | 操作数为true,结果是false; 操作数为false,结果为true |
& | 逻辑与 | 两个操作数都是true,结果才是true; 不论左边取值如何,右边的表达式都会进行运算 |
| | 逻辑或 | 两个操作数一个是true,结果为true; 如果左边为true,右边的表达式都会进行运算 |
^ | 逻辑异或 | 两个操作数相同,结果为false; 两个操作数不同,结果为true |
代码演示
package com.base.day03;
import java.util.Scanner;
public class LogicalOperator {
public static void main(String[] args) {
//王浩的java成绩=100并且音乐成绩大于70 或者 java成绩大于90 并且音乐成绩大于80
//王浩会获得奖励
Scanner sc = new Scanner(System.in);
System.out.println("请输入王浩的java成绩:");
int javaScore = sc.nextInt();
System.out.println("请输入王浩的音乐成绩:");
int musicScore = sc.nextInt();
boolean flag = ( (javaScore == 100 && musicScore > 70) || (javaScore > 90 && musicScore > 80) );
//输出王浩是否会得到奖励
System.out.println(flag);
}
}
四、位运算符
位运算符的计算,需要先把十进制转换为二进制
示例:按位与,两个操作数都是1,结果才是1
1011101(十进制:93)
1100001(十进制:97)
&
1000001(十进制:65)
93&97=65
运算符 | 含义 | 运算规则 |
& | 按位与 | 两个操作数都是1,结果才是1 |
| | 按位或 | 两个操作数一个是1,结果为1 |
^ | 按位异或 | 两个操作数相同,结果为0; 两个操作数不同,结果为1 |
~ | 按位非 | 两个操作数都是true,结果才是true; 不论左边取值,右边的表达式都会进行运算 |
<< | 左移 | 右侧空位补0 |
>> | 右移 | 左侧空位补最高位,即符号位 |
>>> | 无符号右移 | 左侧空位补0 |
- 位运算符的操作数都是整型数,包括int、short、long、byte和char
- 位运算符的运算结果也都是整型数,包括int、long
- 如果操作数是char、byte、short,位运算前其值会自动晋升为int,运算结果也为int
- 位运算符对操作数以二进制为单位进行运算
package com.base.day04;
public class BitwiseOperation {
public static void main(String[] args) {
//以最有效率的方式计算8的4次方
System.out.println(8 << 4);
//以最有效率的方式计算8的一半
System.out.println(8 >> 1);
}
}
五、运算符优先级
算数>关系>逻辑>赋值
- 优先级别最低的是赋值运算符
- 单目运算符包括!~++--,优先级别高
- 可以通过()控制表达式的运算顺序,0优先级最高
- 总体而言,优先顺序为算术运算符>关系运算符 >逻辑运算符
- 从右向左结合性的只有赋值运算符、三目运算符和单目运算符
六、条件运算符
条件运算符也称之为三目(三元)运算符
代码演示
package com.base.day04;
import java.util.Scanner;
public class DemonstrationOfConditionalOperators {
public static void main(String[] args) {
//条件运算符演示
//猜大小
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字:");
//next后面需要跟首字母大写的变量名
double num = sc.nextDouble();
//因为"大"和"小"是字符型,所以变量名需要用String,不用char是因为控制台识别不到char类型
String big = num > 100 ? "大" : "小";
System.out.println(big);
}
}
七、总结
综合案例
package com.base.day04;
import java.util.Scanner;
public class CopyWar {
public static void main(String[] args) {
//控制台输入
Scanner sc = new Scanner(System.in);
//准备三个骰子
int a = (int)(Math.random()*6+1);
int b = (int)(Math.random()*6+1);
int c = (int)(Math.random()*6+1);
int summation = a + b + c;
String result = summation > 10 ? "大" : "小";
//准备一千万本金
int myMoney = 1000;
System.out.println("押大押小,买定离手:");
String guess = sc.next();
System.out.println("请输入下注金额:");
int pay = sc.nextInt();
System.out.println(a + "," + b + "," + c + "\t\t\t" + summation + "点" + "\t\t\t" + result);
boolean compare = guess.equals(result);
myMoney = compare ? myMoney + pay : myMoney - pay;
String finalResult = compare ? "押中了!" : "押错了!";
System.out.println(finalResult + "您现在的本金是: " + myMoney);
}
}