1、算术运算符
①字符”+“的操作
算术表达式中存在多个不同的基本数据类型的值的时候,整个算术表达式的类型会自动提升
代码测试说明:
public class Demo {
public static void main(String[] args){
int i = 10;
char a = 'a';
int ans = i + a;
System.out.println("int " + ans);
char o = '0';
double d = i + 3.14159;
int j = i + o;
System.out.println("int " + j);
System.out.println("double " + d);
}
}
测试结果:
int 107
int 58
double 13.14159
提升规则为
a. byte类型、short类型和char类型将直接转换为int类型
b. 整个表达式将自动提升到表达式中最高等级的操作数相同的类型、
等级顺序为:byte、short、char → int → long → float → double
②字符串的”+“操作
a. 当”+“操作中左右为字符串时,操作结果为字符串的拼接
b. 当”+“操作中左右为数字时,操作结果为数字进行加法(我也不知道为什么要写这么一句话)
2、赋值运算符
x=y;
一个简单的赋值语句
"="执行顺序是先执行"="的右边的语句再执行赋值功能(在程序运行阶段)
其中在执行"="右边的语句时,右边的语句按照从左往右的顺序执行语句
而对于"="两边的内容也有不同的表述和含义
其中"="左边的被称作左值,右边的被称作为右值
"="右边的语句通过执行产生一个“值”,再执行"="符号赋值给左边的变量
其中我们可以确认"="右边即为一个“值”,而"="左边即为一个“容器”
例如:
int a = 125;
int b = 125;
int c = a + b;
可以知道a、b、c均是在定义后由系统分配地址和空间产生的“容器”,而"="右边即使一些可以产生“值”的语句
3、自增自减运算符
++i和i++的区别
单独使用都差不多
代码展示:
public class Demo {
public static void main(String[] args){
int ans1 = 1;
System.out.println("ans1 "+ans1);
ans1++;
System.out.println("ans1 "+ ans1);
int ans2 = 1;
System.out.println("ans2 "+ans2);
System.out.println("ans2 "+ ++ans2);
}
}
输出结果:
ans1 1
ans1 2
ans2 1
ans2 2
对比使用:
a、
代码展示:
public class Demo {
public static void main(String[] args){
int i = 10;
System.out.println("i "+i);
int j = i++;
System.out.println("i: "+i);
System.out.println("j: "+j);
}
}
输出结果:
i 10
i: 11
j: 10
b、
代码展示:
public class Demo {
public static void main(String[] args){
int i = 10;
System.out.println("i "+i);
int j = ++i;
System.out.println("i: "+i);
System.out.println("j: "+j);
}
}
输出结果:
i 10
i: 11
j: 11
也就是说当"++"位于赋值语句中时,其出现在变量前后的位置不同,语句运行结果也不同
当"++"位于变量后方时,即int j = i++;整个语句的执行顺序为先将i的值赋值给j,然后i再进行i++运算,我的理解是先执行i++所在的语句内容,后执行对i变量自加;
当"++"位于变量前方时,即int j = ++i;整个语句的执行顺序为先执行++i语句,然后再将i的值赋值给j。我的理解是先执行对i变量自加,后执行++i所在的语句。
其中在调试的时候出现了一种情况,万幸的是在课堂上老师也提到了
public class demo {
public static void main(String[] args){
int ans = 1;
System.out.println(ans++);//输出的结果是ans=1;
}
}
当然通过上述的理论视乎也能解释的通
下面讲一下课堂上吸收到的思想
还原函数println();
假定函数返回值为void
即:void println(int arg){}
上述Java代码实际操作为:
int ans = 1;
int arg = ans++;
void println(int arg){}
System.out.println(ans++);//输出的结果是ans=1;
关于"+=, -=, =, /=,^=…"
注意在有些变量下的语句i+=1;和i=i+1;并不相同
public class Demo {
public static void main(String[] args){
byte i = 1;
i = i + 1;//报错,不兼容的类型,1从int型转换为byte型会丢失精度
i+=1;//未报错,等价与i = (byte)(i+1),改内容涉及到强制转换,整型常量默认未int型,浮点型常量默认为double型
System.out.println(i);
}
}
4、逻辑运算符
逻辑运算符:& | ! && || == != >= <=
其中"&“叫做逻辑与,”&&"叫做短路与;
//(语句1 & 语句2)———>boolean值
//逻辑与"&"运算结果为:
//true & true ---> true
//true & false ---> false
//false & true ---> false
//false & false ---> false
//(语句1 && 语句2)———>boolean值
//短路与"&&"运算结果为:
//true && true ---> true
//true && false ---> false
//false && true ---> false
//false && false ---> false
//其中逻辑与"&"和短路与"&&"的区别是:
//逻辑与即使在判断语句的过程中遇到了语句内容产生的值为false,也会将整个"&"存在的语句执行完毕,输出最终值;
//短路与则是在判断语句的值出现false后终止判断语句,输出最终值。
//故在实际操作中短路与使用较多,且在使用短路与的同时应该考虑到将容易产生false的语句放到靠前位置(当然也并非所有情况都是如此,从考虑到程序运行效率和速度的时候可以这样)
还有就是"|“和”||"的区别:
//(语句1 | 语句2)———>boolean值
//"|"运算结果为:
//true | true ---> true
//true | false ---> true
//false | true ---> true
//false | false ---> false
//(语句1 || 语句2)———>boolean值
//"||"运算结果为:
//true | true ---> true
//true | false ---> true
//false | true ---> true
//false | false ---> false
5、三目运算符
表达式1 ? 表达式2 : 表达式3
例如:int a = 100;
int b = 200;
int c = (a > b) ? a : b;
public class Demo {
public static void main(String[] args) {
int a = 100;
int b = 200;
int c = (a > b) ? a : b;
System.out.println(c);//结果为 200
}
}