赋值运算符的使用:不会改变数据类型
/*
运算符之二:赋值运算符
= += -= *= /= %=
*/
class SetValueTest {
public static void main(String[] args) {
//赋值符号: =
int i1 = 10;
int j1 = 10;
int i2,j2;
//连续赋值
i2 = j2 = 10;
int i3 = 10,j3 = 20;
//赋值符号:+=
int num1 = 10;
num1 += 2;//num1 = num1 + 2,不会改变本身的数据类型
System.out.println(num1);
//未来会有很多的加一操作
int num = 1;
num = num + 1;
num += 1;
num++;//(优先采用这种方法)
System.out.println(num);
//小小练习题
int n = 10;
n += (n++) + (++n);//n = n + (n++) + (++n)
System.out.println(n);//32 = 10 + 10 +12
}
}
比较运算符:
> < >= <=:只能使用在数值类型的数据之间。
== 不仅可以使用在数值类型的数据之间,还可以使用在其他引用类型变量之间。
/*
运算符之三:比较运算符
== != > < >= <= instanceof
结论:
1.比较运算符的结果是Boolean类型
2.区分 == 和 =
*/
class CompareTest{
public static void main(String[] args) {
int i = 10;
int j = 20;
System.out.println(i == j);//false
}
}
逻辑运算符:只适用于布尔类型的变量!
/*
运算符之四:
& && | || !(非) ^(异或)
说明:
逻辑运算符操作的只能是bollean类型的变量!
而且结果也是boolean类型。
*/
class LogicTest{
public static void main(String[] args) {
//区分一下$和$$ 也就是区分一下单与和双与
//相同点:运算结果都是一样的
//当符号左边是true时他们两者都会执行右边,
//当符号左边是false时,单与仍然执行右边的运算,但是双与就不再执行右边的式子了!
//同理,也可以推广到单或(|)和双或(||)之间的区别
//开发中推荐使用短路与和短路或
boolean b1 = false;
int num1 = 10;
if(b1 & (num1++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num1 = " + num1);
boolean b2 = false;
int num2 = 10;
if(b2 && (num2++ > 0)){
System.out.println("我现在在北京");
}else{
System.out.println("我现在在南京");
}
System.out.println("num2 = " + num2);
}
}
位运算符:是直接对整数的二进制进行的运算!
/*
运算符之5:位运算符:
结论:
1.位运算符操作的都是整型的数据
2.<< 左移:在一定范围内,每向左移动一位,相当于*2
>> 右移:在一定范围内,每向右移动一位,相当于/2(正的用0补全,负数用1补全)
>>> 无符号右移,最高位无论是0还是1直接用 0 去补。
& 与
| 或
^ 异或
~ 取反
面试题:
Q:最高效的方式计算 2 * 8? A:2 << 3 或者 8 << 1。
*/
class BitTest {
public static void main(String[] args) {
int i = 10;
System.out.println("i << 2 = " + (i << 2));
//移动数值过大
int j = 10;
System.out.println("j << 227 = " + (j << 227));
int n = 12;
int m = 5;
System.out.println(" m & n = " + (m & n));
System.out.println(" m | n = " + (m | n));
System.out.println(" m ^ n = " + (m ^ n));
//练习题:交换两个变量的值:
int num1 = 10;
int num2 = 20;
System.out.println("num1 = " + num1 + "num2 = " + num2);
//方式一:定义一个临时变量来计算:
int temp = num1;
num1 = num2;
num2 = temp;
System.out.println("num1 = " + num1 + "num2 = " + num2);
//方式二:好处:不用定义临时变量;
//弊端:数据值相加后超出范围
//弊端:有数据类型的限制:只适用于数值类型
num1 = num1 + num2;//num1 = 30
num2 = num1 - num2;//num2 = 10
num1 = num1 - num2;//num1 = 20
//方式三:使用位运算符:(13 ^ 5) ^ 5 = 13,和第二种异曲同工,
//但是少了方式二的第一个弊端
// int num1 = 10;
// int num2 = 20;
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
System.out.println("num1 = " + num1 + "num2 = " + num2);
}
}
三元运算符:
/*
运算符之六:三元运算符
1.结构:(条件表达式)?表达式:1 表达式:2
2.说明:
1.条件表达式结果为Boolean类型。
2.根据条件表达式的真假,决定执行表达式1还是表达式2
如果为true,则执行表达式1
如果为false,则执行表达式2
3.表达式一和表达式二的要求必须是一致的。
3.凡是可以使用三元运算符的地方,都可以改写成 if - else
反之不成立!
4.如果程序既可以用三元运算符又可以用if - else,优选前者。
*/
class SanYuanTest {
public static void main(String[] args) {
//获取两个整数的较大值
int m = 12;
int n = 12;
if (m > n){
System.out.println("m大");
}else{
System.out.println("n大");
}
int max = (m > n) ? m : n;//m 和 n 最起码可以统一成一个数据类型。
System.out.println("max = " + max);//result = 12
//**********************
String maxStr = (m > n)? "m大" :((m == n)? "m和n相等" :"n大");
System.out.println(maxStr);
//获取三个数的最大值
int n1 = 12;
int n2 = 30;
int n3 = -43;
int max1 = (n1 > n2)? n1 : n2;
int max2 = (max1 > n3)? max1 : n3;
}
}