运算符:
算术运算符: +, -, *, /, %,前 ++,后 ++,前 --,后 –
赋值运算符
比较(关系运算符)
逻辑运算符
位运算符
三元运算符
1. ‘+’:
2. ‘-’:
3. ‘/’:int型的除运算只保留整数部分
4. ‘%’:结果得符号应与被模数的符号相同
5. ‘++’:前++(先自增,后运算)、后++(先运算后自增);若使用时,分开写,结果没影响
6. ‘--’:同上
class AriTest{
public static void main(String[] args){
//除号:/
int num1 = 12;
int num2 = 5;
int result1 = num1 / num2;
System.out.println(result1); //2
int result2 = num1 / num2 * num2;
System.out.println(result2); //10
double result3 = num1 / num2;
System.out.println(result3); //2.0
double result4 = num1 / (num2 + 0.0);
System.out.println(result4); //2.4
double result5 = (double)num1 / num2;
System.out.println(result5); //2.4
double result6 = (double)(num1 / num2);
System.out.println(result6); //2.0
//取模:%
//取模的符号与被模数的符号相同
//开发中,经常使用%判断能否被除尽
int m1 = 12;
int n1 = 5;
System.out.println("m1 % n1 = "+ m1 % n1); //2
int m2 = -12;
int n2 = 5;
System.out.println("m2 % n2 = "+ m2 % n2); //-2
int m3 = 12;
int n3 = -5;
System.out.println("m3 % n3 = "+ m3 % n3); //2
int m4 = -12;
int n4 = -5;
System.out.println("m4 % n4 = "+ m4 % n4); //-2
//前++(先自增,后运算)、后++(先运算后自增)
int a1 = 10;
int b1 = ++a1; //若分开写,前--、后--是没有区别的
System.out.println("a1 = " + a1 + ",b1 = " + b1); // 11,11
int a2 = 10;
int b2 = a2++;
System.out.println("a2 = " + a2 + ",b2 = " + b2); //11,10
//注意
short s1 = 10;
//s1 = s1 + 1; 编译失败(自动类型提升后,应赋值给int型)
s1 = (short)(s1 + 1);
s1++; //自增1不会改变本身变量的数据类型
System.out.println("s1 = " + s1);
//前--(先减,后运算),后--(先运算,后减)
//练习,得各位数字
int x = 187;
System.out.println("数字"+ x + "的情况如下:");
System.out.println("个位数:" + x % 10);
System.out.println("十位数:" + x / 10 % 10);
System.out.println("百位数:" + x / 100);
}
}
class Test{
public static void main(String[] args){
boolean x = true;
boolean y = false;
short z = 42;
//if(y == true)
if((z++ == 42) &&(y = true)) z++;
if((x = false) || (++z == 45)) z++;
System.out.println("z=" + z); //46
}
}
&:逻辑与
&&:短路与
相同点:&与&&运算结果相同;当左边为true时,都执行;
不同点:当左边为false,短路不执行右边的
开发中推荐使用短路
|:逻辑或
||:短路或
相同点:运算结果相同;当符号左边是false时都执行
不同点:当符号左边是true时,短路不执行符号右边。
开发中推荐使用短路
!:逻辑非
^:逻辑异或
class LogicTest{
public static void main(String[] args){
//区分&与&&
//相同点:&与&&运算结果相同;当左边为true时,都执行
//不痛点:当左边为false,短路不执行右边的
//开发中推荐使用短路
boolean b1 = true;
//b1 = false;
int num1 = 10;
if(b1 | (num1++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1); //11
boolean b2 = true;
//b2 = false;
int num2 = 10;
if(b2 || (num2++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num2 = " + num2); //10
//区分 |与||
//相同点:运算结果相同;当符号左边是false时都执行
//不同点:当符号左边是true时,短路不执行符号右边。
//开发中推荐使用短路
}
}
结果:结果为整型
1.<< , >>
操作的都是整型的变量,每向左移一位,乘以2,向右移除以2(负数高位补1)
面试题:最高效的 2*8 最高效的:移位
2.>>>:无符号移
3.&:
4.|:
5.^ :
6.~:按补码取反
class BitTest{
public static void main(String[] args){
int i = -21;
System.out.println("i << 2 :" + (i << 2));
System.out.println("i << 3 :" + (i << 3));
int m = 12;
int n = 5;
System.out.println("m & n :" + (m & n));//4
System.out.println("m | n :" + (m | n));//13
System.out.println("m ^ n :" + (m ^ n));//9
//练习:交换两个变量的值
int num1 = 10;
int num2 = 20;
int num3 = 10;
int num4 = 20;
//方式1:推荐
int temp;
temp = num1;
num1 = num2;
num2 = temp;
System.out.println("num1 = "+ num1 +" num2 = "+num2);
//方式2:
//弊端:相加操作可能超出存储范围,有局限性
num3 = num3 + num4;
num4 = num3 - num4;
num3 = num3 - num4;
System.out.println("num3 = "+ num3 +" num4 = "+num4);
//方式3:
int num5 = 10;
int num6 = 20;
num5 = (num5 ^ num6);
num6 = num5 ^num6;
num5 = num5^num6;
System.out.println("num5 = "+ num5 +" num6 = "+num6);
}
}
= ,支持连续赋值
+=、-=、/=、*=,不会改变数据类型
short s1 = 10;
//s1 = s1 + 2; 编译不通过
s1 += 2; //不会改变数据类型
System.out.println(s1);
int num= 10;
//加2操作推荐
num += 2;
//+1操作推荐
num++;
//
int i = 1;
i *= 0.1;
System.out.println(i); //0
i++;
System.out.println(i); //1
//练习2
int m = 2;
int n = 3;
n *= m++;
System.out.println("m=" + m); //3
System.out.println("n=" + n); //6
//练习3
int x = 10;
x += (x++) + (++x); //x = x + (x++) + (++x); 32
System.out.println(x);
比较运算符: 结果为boolean
== ,!= :不仅可以使用在数值类型的数据之间,还可以使用在其他引用类型的变量间
Account acct1 = new Account(100);
Account acct2 = new Account(100);
boolean b1 = (acct1 == acct2);
//比较结果为两个Account是否为同一个账户:false
, < ,>=, <= :只能使用在数值类型的数据之间
instanceof
比较运算符的结果是Boolean类型
注意:区分==和=
int k1 = 10;
int k2 = 20;
System.out.println(k1 == k2); //false
System.out.println(k1 = k2); //20
boolean b1 = true;
boolean b2 = false;
System.out.println(b1 == b2); //false
System.out.println(b2 = b1); //ture
1.格式:(条件表达式)?表达式1:表达式2;
2. 注意:
1)条件表达式的结果为Boolean,为true执行1,为false执行2
2)表达式1和表达式2要求是一致的,能统一类型
3)三元运算符可以嵌套
4)凡事可以三元运算符的都可以使用if else,反之不行哦~
5)如果程序既可以使用三元运算符,又可以使用if else,那么优优先选择三元运算符,原因:简洁、效率高
class SanYuan{
public static void main(String[] args){
//获取两个整数中的较大值
int m = 12;
int n = 5;
int max = (m > n)? m : n;
System.out.println(max);
//(m > n)? 2 : "n大"; 编译错误 条件2)
String maxStr = (m > n)? "m大" : ((m == n) ? "m和n相等" : "n大");
System.out.println(maxStr);
//获取三个数的最大值
int n1 = 12;
int n2 = 10;
int n3 = -43;
//方法1:推荐
int temp = (n1 > n2)? n1 : n2;
temp = (temp > n3) ? temp : n3;
//方法2:合并
int temp2 = (((n1 > n2)? n1 : n2) > n3) ? ((n1 > n2)? n1 : n2) : n3;
System.out.println("max1 = "+temp);
System.out.println("max2 = "+temp2);
}
}