运算符
运算符:对字面量或者变量进行操作的符号
表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以陈伟表达式。不同运算符连接的表达式体现的是不同类型的表达式
1、算数运算符
加( + )、减( - )、乘( * )、除( / )、取模( % )
"+" 操作的三种情况
1.1 数字相加
1.1.1 隐式转换
/*
数字相加: 数字进行运算时,数据类型不一样不能运算,需要转成一样的,才能运算
数据类型的转换:
隐式转换(自动类型提升): 数据类型不一样,不能进行运算,需要转成一样的才可以进行运算
规则:
取范围小的与取值范围大的进行运算,小的会先提升为大的,再进行运算
byte short char 三种类型的数据在运算的时候,会先提升为 int ,再进行运算
大小关系:
byte < short < int < long < float < double
范例:
int a = 10;
double b = a;
System.out.println(b); //10.0 , b为double类型
int a = 10;
double b = 12.3;
c = a + b; //c为double类型
byte a = 10;
byte b = 20;
c = a + b; // c为int类型
*/
// 请问最终的运算结果是什么类型的
byte b1 = 10;
byte b2 = 20;
result = b1 + b2; // result 数据类型为 int (byte -> int)
int i = 10;
long n = 100L;
double d = 20.0;
result = i + n + d; // result 数据类型为 double (int -> lone -> double)
byte b = 10;
short s = 20;
long n = 100L;
result = b + s + n; // result 数据类型为 long (byte,short -> int -> long)1.1.2 强制转换
/*
强制转换:
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据;
int a = 300;
byte b = (byte) a;
*/
// 练习
public class ArithmeticoperatorDemo3 {
public static void main(String[] args){
byte b1 = 10;
byte b2 = 20;
//int result = b1 + b2;
byte result = (byte)(b1 + b2);
System.out.println(result); // 30
}
}1.2 字符串相加
/*
字符串 "+" , 对字符串进行 拼接
连续 "+" 时,从左到右逐个执行
*/
//练习
System.out.println(3.7 + "abc"); // "3.7abc"
System.out.println("abc" + true); // "abctrue"
System.out.println('中' + "abc" + true); // "中abctrue"
int age = 18;
System.out.println("我的年龄是" + age + "岁"); // 我的年龄是18岁
System.out.println("我的年龄是" + "age" + "岁"); // 我的年龄是age岁
System.out.println(1 + 2 + "abc" + 2 + 1); // "3abc21"
/*
数值拆分
需求:键盘录入一个三位数,将其拆分为个、十、百位,打印在控制台中
在之前的 Test1 中输出部分新增字符串拼接
*/
package com.yq.test;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args){
//练习:数值拆分(键盘录入一个三位数,将其拆分为个位、十位、百位,打印在控制台)
// 1、键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个三位数:");
int number = sc.nextInt();
// 2、获取个位、十位、百位
/*
公式:
个位:数字 % 10
十位:数字 / 10 % 10
百位:数字 / 100 % 10
*/
int ge = number % 10;
int shi = number / 10 % 10;
int bai = number / 100 % 10;
System.out.println("个位是: " + ge);
System.out.println("个位是: " + shi);
System.out.println("个位是: " + bai);
}
}
1.3 字符相加
/*
字符 + 操作
字符 + 字符(数字):会把字符通过 ASCII码表 查询到对应的数字再进行计算
*/
//练习
System.out.println(1 + 'a'); // 1+97
System.out.println('a' + "abc"); // "aabc"注意事项:
/ 和 % 区别:两个数据做除法, / 取结果的商,%取结果的余数
整数操作只能得到整数,要想得到小数,必须要有浮点数参与计算
2、自增自减运算符
2.1 单独使用
/*
++ 和 -- 无论放在变量的前还是后,单独写一行结果是一样的
a++ <==> ++a
a-- <==> --a
*/
package com.yq.arithmeticoperator;
public class ArithmeticoperatorDemo5 {
public static void main(String[] args) {
// ++ 和 --
int a = 10;
// 表示把变量a里面的值+1
a++;
System.out.println(a); // 11
// 表示把变量a里面的值+1
++a;
System.out.println(a); // 12
// 表示把变量a里面的值-1
a--;
System.out.println(a); // 11
// 表示把变量a里面的值-1
--a;
System.out.println(a); // 10
}
}
// 应用场景1:年龄 +1
int age = 1;
age++;
System.out.println(age);
// 应用场景2:购物数量 +1
// 应用场景3:人物数量 +1
2.2 参与计算
// 先用后加
int a = 10;
int b = a++;
System.out.println(b); //10
// 先加后用
int a = 10;
int b = ++a;
System.out.println(b); //11
// 练习
public class Test {
public static void main(String[] args){
int x = 10;
//后++,先用后加,先把x变量中的值拿出来用,赋值给y,然后再进行自增
//赋值给y的值是自增前的
int y = x++; // x=11 y=10
//先++,先加后用,先把x进行自增,然后把自增后的结果赋值给左边的变量
// 先把x自增,变成12,然后再把自增后的12赋值给z
int z = ++x; // x=12 z=12
System.out.println("x:" + x); //12
System.out.println("y:" + y); //10
System.out.println("z:" + z); //12
}
}3、赋值运算符
注意: 赋值运算符的底层逻辑中,存在一个强制转换
package com.yq.assigningoperator;
public class AssigningoperatorDemo1 {
public static void main(String[] args) {
// +=
// 规则:将左边和右边进行相加,然后再把结果赋值给左边
int a = 10;
int b = 20;
// 把a+b,在把结果赋值给左边的变量a
a += b;
//等同于 a = (int)(a + b);
System.out.println(a);
System.out.println(20);
//细节
// += -= *= /+ %= 底层都隐藏了一个强制类型转换
short s = 1;
s += 1; // short类型运算,会先将short提升为int再进行计算,再此处会再进行short类型转换
// 等同于: s = (short)(s + 1)
System.out.println(s);
}
}
4、关系运算符(比较运算符)
注意事项: 关系运算符的结果都是 blooean 类型,true、false。千万不要把 == 误写成 =
import java.util.Scanner;
public class test2 {
public static void main(String[] args) {
/* 需求:
您和您的约会对象正试图在餐厅获得一张桌子。
键盘录入两个整数,表示你和你约会对象衣服的时髦度。(手动录入0~10之间的整数,不能录其他)
如果你的时髦程度大于你对象的时髦程度,相亲就成功,输出true。
否则输出false。*/
// 1.键盘录入两个整数表示衣服的时髦度
Scanner sc = new Scanner(System.in);
System.out.println("请输入我们自己的衣服时髦度");
int myFashion = sc.nextInt();
System.out.println("请输入相亲对象的衣服时髦度");
int girlFashion = sc.nextInt();
// 2.进行时髦度对比
boolean result = myFashion > girlFashion;
// 3.打印结果
System.out.println(result);
}
}5、逻辑运算符
数学中: 5 < x < 15 java中: x > 5 & x < 15
分类:
短路逻辑运算符
public class LogicoperatorDemo3 {
public static void main(String[] args) {
// 1. &&
// 运算结果和 单个 & 是一样的
// 表示两边都为真,结果才是真
System.out.println(true && true); //true
System.out.println(false && false); //false
System.out.println(false && true); //false
System.out.println(true && false); //false
// 2. ||
// 运行结果和 单个 | 是一样的
// 表示两边都为假,结果才是假
System.out.println(true || true); //true
System.out.println(false || false); //false
System.out.println(false || true); //true
System.out.println(true || false); //true
// 3. 短路逻辑运算符具有短路效果
// 当左边的表达式能确定最终的结果,那么右边就不会参与运行了
int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b < 5;
System.out.println(result); //false
System.out.println(a); //11
System.out.println(b); //10
int c = 10;
int d = 10;
boolean result1 = ++c < 5 & ++d < 5;
System.out.println(result1); //false
System.out.println(c); //11
System.out.println(d); //11
}
}练习:
import java.util.Scanner;
public class test3 {
public static void main(String[] args) {
/*数字6是一个真正伟大的数字,键盘录入两个整数。
如果其中一个为 6,最终结果输出true。
如果它们的和为 6的倍数。最终结果输出true。
其他情况都是false。*/
//分析:
//1.键盘录入两个整数
// 变量a 变量b
// 键盘录入两个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数");
int number1 = sc.nextInt();
System.out.println("请输入第二个整数");
int number2 = sc.nextInt();
//2.a==6 b==6 (a+b)%6==0
// 如果满足其中一个,那么就可以输出true
// 设置短路逻辑运算符 连接三个判断
boolean result = number1 == 6 || number2 == 6 || (number1 + number2) % 6 == 0;
System.out.println(result);
}
}6、三元运算符
作用: 可以进行判断,根据判断的结果得到不同的内容
# (三元运算符/三元表达式)格式
格式: 关系表达式 ? 表达式1 : 表达式2
范例: 求两个数的较大值
int max = a > b ? a : b;
System.out.println(max);
System.out.println(a > b ? a : b);
## 实现
public class TernaryoperatorDemo1 {
public static void main(String[] args) {
//需求: 使用三元运算符, 获取两个整数的较大值
//1.定义两个变量记录两个整数
int number1 = 10;
int number2 = 20;
//2.使用三元运算符获取两个整数的较大值
//格式 关系表达式 ? 表达式1 : 表达式2
//整个三元运算符的结果必须要被使用
int max = number1 > number2 ? number1 : number2;
System.out.println(max);
System.out.println(number1 > number2 ? number1 : number2);
}
}练习一: 两只老虎
import java.util.Scanner;
public class test4 {
public static void main(String[] args) {
/* 需求: 动物园里有两只老虎, 体重分别为通过键盘录入获得
请用程序实现判断两只老虎的体重是否相同
*/
// 分析
// 1.键盘录入两只老虎的体重
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一支老虎的体重");
int weight1 = sc.nextInt();
System.out.println("请输入第二支老虎的体重");
int weight2 = sc.nextInt();
// 2.比较
// true false
// 相同 不同
// System.out.println(weight1 == weight2)
String result = weight1 == weight2 ? "相同" : "不同";
System.out.println(result);
}
}练习二: 求三个数的最大值
package com.yq.test;
public class test5 {
public static void main(String[] args) {
/* 需求:一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,
请用程序实现获取这三个和尚的最高身高。*/
//1.定义三个变量记录三个和尚的身高
int height1 = 150;
int height2 = 210;
int height3 = 165;
// 2.比较
int result1 = height1 > height2 ? height1 : height2;
int result2 = result1 > height3 ? result1 : height3;
System.out.println(result2);
}
}7、运算符优先级
小括号优先于所有
int a = 10;
int b = 20;
int c = 30;
System.out.println(a + b * c);
System.out.println(a + (b * c));
评论区