1、运算符
1.1、算数运算符
+ - * / %
三种含义:
1. 运算
public class Demo01 {
public static void main(String[] args) {
int a=20;
int b=10;
System.out.println(a+b); // 30
2.正负
int a1=+5;
System.out.println(a1); // 5
3.拼接,连接符
字符串和其他数据类型进行运算,结果一定是字符串类型
String s1="abc";
int a2=10;
String s3 = s1 + a2;
System.out.println(s3);
System.out.println("helloworld"+a2+"abc"+'d'+true+3.14);
//定义两个变量 m和n m的值是5,n的值是8,连接成 5+8=13;
int m=5,n=8;
System.out.println(m+"+"+n+"="+(m+n)+";");
4、 符号
① 运算 ② 正负
System.out.println(10-100);
System.out.println(10-(-5));
// System.out.println("helloo"-"o"); 错误的!
6.乘号
System.out.println(3.5 * 2.6);
System.out.println(2 * 3);
7.除以
System.out.println(10/2);
System.out.println(10/3);
System.out.println(0/3);
System.out.println(3/3);
//ArithmeticException 算术异常
//System.out.println(3/0);
- 取模 ,求余数
System.out.println(10%3); // 1
System.out.println(5%5); // 0
System.out.println(2%10); // 2
System.out.println(0%10); // 0
System.out.println(3.5%2); // 1.5
}
}
++ - - (重点)
public class Dome02 {
public static void main(String[] args) {
// ++ 自增1
int a=5;
a++;
System.out.println(a); // 6
int b=5;
++b;
System.out.println(b); // 6
}
}
public class Demo03 {
public static void main(String[] args) {
int a=5;
//a先赋值给b,然后a再自增1
int b = (a++);
System.out.println("a:"+a);
System.out.println("b:"+b);
int m=5;
//m先自增1,自增完成后把结果赋值给n
int n = ++m;
System.out.println("m:"+m);
System.out.println("n:"+n);
}
}
总结:++在变量之前,先自增1,后其他操作!
++在变量之后,先其他操作,再自增1!
即使有小括号,也不影响!
1.2、赋值运算符
+= - = *= /= %=
public class Demo04 {
public static void main(String[] args) {
// += -= *= /= %=
int a = 5;
// 计算:相当于a=a+2;
// a=a+2
a += 2;
System.out.println(a);// 7
a -= 3;
System.out.println(a);// 4
a *= 2;
System.out.println(a);//8
//a /= 3; 除不尽保留整数部分
a /= 4;
System.out.println(a);// 2
//a=a%1;
a %= 1;
System.out.println(a);// 0
}
}
问题1:a += 2 是不是等价于与 a = a+2 ?
答:不等价
byte a1 = 5;
a1 += 2;
System.out.println(a1);// 7
byte a2 = 5;
a2 = (byte)(a2 + 2);
System.out.println(a2);// 7
}
}
问题2:+= 和 =+ 的问题
int m = 10;
m += 2; // m=10+2=12
System.out.println(m);// 12
int n = 10;
n=+2;// n=+2=2
System.out.println(n);// 2
}
}
1.3、比较(关系)运算符
> < >= <= == != (不等于)
比较运算符的结果都是boolean类型的字面值(true,false)
public class Demo05 {
public static void main(String[] args){
// 关系(比较)运算符:
int a = 5,b = 10;
System.out.println(a == b);// false
System.out.println(a != b);// true
System.out.println(a > b);// false
System.out.println(a < b);// true
System.out.println(a >= b);// false
System.out.println(a <= b);// true
System.out.println(a >= ++b);// b=11 false
// 数学中比较用= , java用 == 来比较 , java的 = 是赋值
System.out.println(a == b); // false
System.out.println(!!!!!!!!!!!(a!=b)); // false ! 两两抵消
}
}
1.4、逻辑运算符
用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。
1、逻辑或 | ,逻辑与 & ,^ 逻辑异或,取反!
public class Demo06 {
public static void main(String[] args) {
// | 或者
/*
* 左边一个条件,右边一个条件,只要有一个条件成立,最终结果是成立!(true)
* 左边和右边都不成立,最终结果是不成立!(false)
*
* */
int a=7,b=5,c=10;
System.out.println(a>b | a>c); //true
// & 并且,与
/*
* 左边一个条件,右边一个条件,只要有一个条件不成立,最终结果就不成立!
* 两边都必须成立,最终结果才成立!
* */
System.out.println(a>b & a<c); //false
// ^ 异或
/*
* 异 ,不同!
*
* 左边一个条件,右边一个条件,只要两个条件不同(异),那么最终结果就是true!
* 两边条件只要是相同,结果是false!
*
* */
System.out.println(a>b ^ a<c); //false
System.out.println(a>b ^ a>c); //true
//!取反
System.out.println(!true);
boolean flag = ! (5 != 10);
System.out.println(flag); //false
}
}
2、短路或 || ,短路与 &&
|| 短路或
|| 短路或和 | 最终结果都是一样的!
区别:|| 短路或,只要第一个条件就能判断最终结果的,第二个条件就不执行! 第一个条件成立,第二个条件就不判断!!!
public class Demo07 {
public static void main(String[] args) {
int a=5,b=10;
//第二个条件执行
//System.out.println( b>a | 1==a++ );
//第二个条件不执行
System.out.println( b>a || 1==a++ );
//第二个条件执行了
//System.out.println( 1!=1 || 1==a++ );
System.out.println(a);
&& 短路与
只要第一个条件就能判断最终结果的,第二个条件就不执行!
第一个条件不成立,第二个条件不会执行!
// System.out.println(5>30 & 1==b++);
System.out.println(5>30 && 1==b++);
System.out.println(b);
}
}
1.5、三元运算符(三目运算)
基本语法: 数据类型 变量名 = 条件表达式 ? 字面值1 :字面值2;
注意: 字面值必须和数据类型匹配
条件表达式:只要结果是boolean类型字面值,就是条件表达式
运算规则:
1.如果条件表达式为true,运算后的结果是字面值1;
2.如果条件表达式为false,运算后的结果是字面值2;
理解:条件表达式是否成立,决定哪一个字面值赋值给变量,
如果条件表达式成立,第一个字面值赋值给变量,
如果条件表达式不成立,第二个字面值赋值给变量!
public class TernaryOperator01 {
public static void main(String[] args) {
int a = 15;
int b = 30;
int result = a > b ? a++ : b--;
System.out.println("result="+ result); // result=30
}
}
应用场景: 这次考试如果及格,爸爸带我去游乐场,否则爸爸揍我一顿!
用户在控制台输入成绩,来判断是去游乐场还是揍我一顿!
public class TernaryOperator02 {
public static void main(String[] args) {
//1.创建Scanner类的对象
Scanner sc = new Scanner(System.in);
// 2.提示用户输入考试成绩
System.out.println("请输入您的成绩?");
// 3.获取用户输入的成绩
double score = sc.nextDouble();
// 4.判断用户的成绩是否及格
String result = score >= 60.0 ? "爸爸带我去游乐场!":"爸爸揍我一顿!";
System.out.println(result);
}
}
三元运算符 练习
public class TernaryOperatorExercise {
public static void main(String[] args) {
//案例:实现三个数的最大值
int n1 = 456;
int n2 = 49;
int n3 = 234;
//思路
//1.先得到n1和n2中最大数,保存到max1
//2.然后再求出max1和n3中的最大数,保存到max2
int max1 = n1 > n2 ? n1 : n2;
int max2 = max1 > n3 ? max1 : n3;
System.out.println("最大数="+max2); //最大数=456
}
}