一、运算符[重点]
常用的运算符
- 赋值运算
- 算术运算
- 关系运算
- 逻辑运算
- 三目运算
2.1 赋值运算
将数据赋值给变量
= ,直接赋值
+= , -= , *= , /= 运算完再赋值
演示
public class Test01 {
public static void main(String[] args) {
/**
* = 赋值,将右边的赋值给左边
* 注意,赋值时数据类型要匹配
* 不匹配时需要强制转换
*/
int a = 1;
int b = (int)1.1;
/**
* += ,赋值
* 是先+后赋值
*/
int c = 1;
// c += 3; // 相当于是c = c + 3
c = c + 3;
System.out.println("c = " + c);
short s = 1;
/** 通过下面的演示, += 会默认进行类型转换 */
// s += 3;
/** s是short,3是int,+后结果是int,赋值给short,类型不匹配 */
// s = s + 3;
s = (short)(s + 3);
System.out.println("s = " + s);
}
}
2.2 算术运算
算术运算是进行数学运算
+加 -减 *(乘) /(除) %(取余)
++
–
演示
public class Test02 {
public static void main(String[] args) {
/**
* +
* 1) 数字相加
* 2) 当两边数字数据类型不一致的时候,
* 运算完结果的数据类型是向大的转换
* 3) 当遇到字符串,会做拼接
* 只要遇到字符串,后续全部是拼接
*/
int a = 1;
int b = 2;
int c = a + b; // 正常相加
System.out.println("c = " + c);
double d = 1.1;
int e = (int) (a + d);// a是int,d是double,+后结果提升为double
System.out.println("e = " + e);
System.out.println(1 + 1);// 2
System.out.println(1 + 1 + "1");//21
System.out.println(1 + 1 + "1" + 1);//211
System.out.println(1 + 1 + "1" + 1 + 1);//2111
// 有括号先算括号
System.out.println(1 + 1 + "1" + (1 + 1));//212
/** =================================== */
/**
* - 减法
* 1) 只能做数字相减
* 2) 字符串不能相减
*/
System.out.println(1 - 1);
System.out.println(0 - 1);
int f = 2;
double g = 2.0;
double h = f - g;
/** =================================== */
/**
* *(乘法)
* 1) 只能数字相乘
*/
System.out.println(2 * 3 );
System.out.println(2 * 3.0 );
/** =================================== */
/**
* /(除法)
* 1) 数字相除
* 2) 整数相除取整,舍弃小数
*/
System.out.println(4 / 2 );// 2
System.out.println(4 / 2.0 );// 2.0
System.out.println(10 / 3 );// 3,整数相除取整,舍弃小数
System.out.println(10 / 4 );// 2,整数相除取整,舍弃小数
System.out.println(10 / 4.0 );// 2.5
/** =================================== */
/**
* %(取余,取模)
* 场景: 1) 判断整除(判断余数是否为0)
* 2) 判断奇偶性(除2判断余数是为0)
*/
System.out.println(10 % 3 );// 余1
// 练习题,分别求出三位数157的每一位(个十百位),然后输出
int num = 157;
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100;
System.out.println("ge = " + ge);
System.out.println("shi = " + shi);
System.out.println("bai = " + bai);
/** =================================== */
/**
* ++,--
* 自增1,自减1
*/
int i = 1;
i++;
System.out.println("i = " + i);
i--;
System.out.println("i = " + i);
/**
* 1) ++不管前后,本身会自增1
* 2) j++,++在后数字在前,先把数字拿去使用,后本身自增
* 3) ++k,++在前数字在后,先自增1,然后再使用
* -------------------
* 谁在前先用谁
*/
int j = 1;
int r = j++;
System.out.println("j = " + j);//j=2
System.out.println("r = " + r);//r=1
int k = 1;
int r2 = ++k;
System.out.println("k = " + k);//k=2
System.out.println("r2 = " + r2);//r2=2
int x = 1;
System.out.println(x++ );//1,x++,x在前,先拿去输出,然后x再自增
System.out.println(x );//2
}
}
练习 ++ - -
b =++a 先a+1,再进行b=a
package com.qf.operation;
public class Test03 {
public static void main(String[] args) {
int a = 10;
int b = 10;
int c = 10;
a = c++;//a=10,c=11
b = --a;//a=9,b=9
c = ++b;//b=10,c=10
System.out.println("a = " + a);//9
System.out.println("b = " + b);//10
System.out.println("c = " + c);//10
int x = 5;
int y = x-- + ++x - --x;
System.out.println("x = " + x);//4
System.out.println("y = " + y);//6
}
}
2.3 关系运算
关系运算,是指变量之间关系,主要大小关系
> < >= <= == 判断是否相等 != 判断是否不相等
关系运算,结果是布尔类型,即true或者false
演示
public class Test04 {
public static void main(String[] args) {
/**
* 关系运算,就是判断大小
* 结果是布尔值,true/false
*/
int a = 1;
double b = 2.0;
boolean r = a > b;
System.out.println("r = " + r);
System.out.println(1 < 0 );// false
System.out.println(1 > 0 );// true
System.out.println(1 >= 1 );// true
System.out.println(1 == 1 );// true
System.out.println(1 != 2 );// true
/**
* 特殊的,String字符串只能使用==或者!=来进行判断
*/
System.out.println("abc" == "ABC" );// false
System.out.println("abc" != "abc" );// false
/** 关系运算主要是后续放在if,for这些判断中去使用 */
}
}
2.4 逻辑运算
逻辑运算是在关系运算基础上升级的, 实现关系的并列或者选择等操作
- 与 &
- 或 |
- 非 !
逻辑运算的结果是布尔值: boolean,
演示
public class Test05 {
public static void main(String[] args) {
/**
* & (与,和,and)
* 语法
* boolean 变量 = 布尔表达式1 & 布尔表达式2;
* 作用:
* 条件并列,全对才对,一错就错
*/
System.out.println(1 > 0 & 1 > 0);// T & T = T
System.out.println(1 > 0 & 1 < 0);// T & F = F
System.out.println(1 < 0 & 1 > 0);// F & T = F
System.out.println(1 < 0 & 1 < 0);// F & F = F
System.out.println("------" );
/**
* | (或,or)
* 语法
* boolean 变量 = 布尔表达式1 | 布尔表达式2;
* 作用:
* 条件选择,一对就对,全错才错
*/
System.out.println(1 > 0 | 1 > 0);// T | T = T
System.out.println(1 > 0 | 1 < 0);// T | F = T
System.out.println(1 < 0 | 1 > 0);// F | T = T
System.out.println(1 < 0 | 1 < 0);// F | F = F
System.out.println("----" );
/**
* ! , (非,not)
* 语法:
* boolean 变量 = !布尔表达式;
* 作用:
* 对布尔值取反
*/
System.out.println(!true );
System.out.println(!(1 > 0) );
System.out.println(!(1 > 0) | 1 > 0 );
}
}
短路与,短路或
- &&
- ||
总结: 当前面第一个式子能够决定整体结果时,后面的式子就短路不再执行
强烈建议: 以后只要用到了逻辑运算,全部使用双的 ,即 && , ||
int i = 1;
// & 无论如何,两边式子都会执行
// System.out.println(1 < 0 & ++i > 0 );
// && ,因为&是一错就错,当第一个式子结果为错的时候,
// 后面的短路跳过不再执行
System.out.println(1 > 0 && ++i > 0);
System.out.println("i = " + i);
int j = 1;
// | 两边都会执行
// System.out.println(1 > 0 | ++j > 0);
// || ,一对就对,前面的式子已经对了
// 后面的式子就短路不执行
System.out.println(1 > 0 || ++j > 0);
System.out.println("j = " + j);
2.5 三目运算
语法:
数据类型 变量 = 布尔表达式 ? true时执行此处 : false时指出此处;
执行顺序:
- 先判断表达式,如果结果是true,就执行?后,:前的地方,后面不再执行
- 如果结果是false,就跳过:前的, 而是执行:后的
public class Test06 {
public static void main(String[] args) {
/**
* 数据类型 变量 = 布尔表达式?true时执行此处:false时指出此处;
*/
int r = 1 < 0 ? 1 : 0;
System.out.println("r = " + r);
int a = 1;
double b = 2.0;
String r2 = a > b ? "a较大" : "b较大";
System.out.println("r2 = " + r2);
// 重点是
// 1) 语法写法
// 2) 执行流程
// 3) 返回值数据类型
}
}