第三天内容主要是运算符相关的笔记,跟下来发现需要消化的内容还是有一部分,而且需要跟一下老韩的练习(基本上出现的代码都会跟着敲一遍),推荐各位在学习的时候也跟着敲一遍,不要光看写好的代码简单就完事了,开发还是熟练度很关键;而且有的内容你可能不一定真的会了,也不要纯照抄,大概看一遍思路再试着自己写,0代码基础的同学可以先照着敲一遍,后面或者第二遍的时候尝试自己敲。
立的30天完成的flag可能有点不行了,毕竟内容讲的比较细,而且博主平日也有其他的事情要做,不光是看课,java学习只是主线之一;不过尽量完成。
Java基础-运算符
运算符简介
运算符分类
- 算术运算符
- 赋值运算符
- 关系运算符(比较运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
算数运算符
需要注意的情况
public class ArithmeticOperator{
public static void main(String[] args){
System.out.println(10 / 4);
System.out.println(10.0 / 4);
//正常需要让参与运算时的数就是高精度
double d = 10 / 4;
System.out.println(d);
//这样也不行,已经运算完毕再赋值的,只能让结果是高精度
}
}
>2
>2.5
>2.0
取模
取模的本质要看一个公式 a % b = a - a / b * b
public class ArithmeticOperator{
public static void main(String[] args){
System.out.println(10 % 3);
System.out.println(-10 / 3);
System.out.println(10 / -3); //注意公式
}
}
>1
>-1
>1
自增
public class ArithmeticOperator{
public static void main(String[] args){
int i = 10;
//i++;
++i;
System.out.println("i=" + i);//独立语句使用时,i都是11
int j = 10;
int k = ++j;//等价于 j=j+1;k=j 先自增 再赋值
System.out.println("j=" + j + "k" + k);// 11 11
int j1 = 10;
int k1 = j1++;//等价于 k1=j1;j1=j1+1 先赋值 再自增
System.out.println("j1=" + j1 + "k1" + k1);// 11 10
}
}
关系运算符
逻辑运算符
短路与(&&)和逻辑与(&)的区别
共同点,作逻辑判断的话:a为true,b为true,则结果是true
不同点,在于表达式的执行
public class LogicOperator {
public static void main(String[] args){
int a = 4;
int b = 9;
if(a < 1 && ++b < 50){
//短路与,&&左边为false那么后面的就不用看了,不执行,但判断效率高
System.out.println("its ok");
}System.out.println("a=" + a + "b=" + b); //4 9
int c = 4;
int d = 9;
if(c < 1 & ++d < 50){
//逻辑与,&左边为false后面的仍然判断(执行)
System.out.println("its ok");
}System.out.println("c=" + c + "d=" + d); //4 10
}
}
短路或(||)和逻辑或(|)的区别
共同点,作逻辑判断的话:条件中有一个成立,则结果是true,否则为false
不同点也是执行上的
public class LogicOperator {
public static void main(String[] args){
int a = 4;
int b = 9;
if(a > 1 || ++b < 3){
//短路或,||左边为true认定表达式为true,后面的就不用看了,不执行,但判断效率高
System.out.println("its ok");
}System.out.println("a=" + a + "b=" + b); //4 9
int c = 4;
int d = 9;
if(c < 1 | ++d < 3){
//逻辑或,&左边为true后面的仍然进行判断(执行)
System.out.println("its ok");
}System.out.println("c=" + c + "d=" + d); //4 10
}
}
取反非(!)
public class LogicOperator {
public static void main(String[] args){
System.out.println(60 > 20);
System.out.println(!(60 > 20));
}
}
>true
>false
异或(^)
public class LogicOperator {
public static void main(String[] args){
System.out.println((true) ^ (false));
System.out.println((true) ^ (true));
System.out.println((false) ^ (false));
}
}
>true
>false
>false
赋值运算符
分类:
-
基本赋值运算符:int a = 10
-
复合运算符:+= -= *= /= %=等
例如:a += b 《==》 a = a + b
特点:
- 运算顺序从右往左
- 赋值运算符的左边 只能是变量,右边可以是变量、表达式、常量值
- 复合赋值运算符会进行类型转换。
public class AssignOperator {
public static void main(String[] args){
byte b = 2;
b += 3;//等价于b=(byte)(b+3);
b++;//等价于b=(byte)(b+1);
}
}
三元运算符
基本语法:
条件表达式?表达式1:表达式2;
如果条件表达式为true,运算后结果是表达式1;否则结果是表达式2
示例代码:
public class TernaryOperator {
public static void main(String[] args){
int a = 10;
int b = 99;
int result = a > b ? a++ : b--;
//易错:这时候result的b是99,非98;先赋值,才--
System.out.println("result=" + result);
System.out.println("a=" + a);
System.out.println("b=" + b);
//但是b的值要注意改变了,与result要区分开
}
}
>result=99
>a=10
>b=98
Detail:
1、表达式1和表达式2要为可以赋给接收变量的类型(或可以自动转换) --也就是注意类型转换的问题
public class TernaryOperator {
public static void main(String[] args){
int a = 10;
int b = 99;
//不可行 报错int c = a > b ? 1.1:3.4;
int c = a > b ? (int)1.1:(int)3.4;
}
}
2、三元运算符本质是一个if--else
运算符优先级
从上到下优先级依次降低,不用背,用多就知道了