运算符篇
- 算数运算符
运算符 | 运算 | 范例 | 结果 |
+ | 正号 | +7 | 7 |
- | 负号 | b = 11; -b | -7 |
+ | 加 | 9 + 9 | 18 |
- | 减 | 10 - 8 | 2 |
* | 乘 | ||
/ | 除 | ||
% | 取模(取余) | 11 % 9 | 2 |
++ ++ | 自增(前) 自增(后) | a = 2; b = ++a; a = 2; b = a ++; | a = 3; b = 3 a = 3; b = 2 |
-- -- | 自减(前) 自减(后) | a = 2; b = --2; a = 2; b = 2--; | a = 1; b = 1 a = 1; b = 2 |
+ | 字符串相加 | “Hello” + “World” | HelloWorld |
public class ArithmeticOperator{
public static void main(String[] args){
//演示算数运算符的使用
System.out.println(10/4);//2
double d = 10/4;
System.out.println(d);//2.0
double m = 10.0/4;
System.out.println(m);//2.5
}
}
System.out.print(-10%3);//(-10)%3----------(-1)
System.out.println(10 % -3);//10-10%3(余数永远和被除数符号一样)----------(1)
System.out.println(-10 % -3);//-1-----------(-1)
int i = 1;
i = i++;
System.out.println("i="+i);//1若:
i = ++i;
System.out.println("i="+i);//2
public class ArithmeticOperator{
public static void main(String[] args){
int i1 = 10;
int i2 = 20;
int i = i1++;
System.out.println("i ="+i);//i = 10,i1 = 11
System.out.println("i2 = "+i2);//20
i = --i2;
System.out.println("i = "+i);//19
System.out.println("i2 = "+i2);//19
}
}
public class ArithmeticOperator{
public static void main(String[] args){
//假设还有59天放假,问折合多少个礼拜零几天
int i1 = 59 / 7;
int i2 = 59 % 7;
System.out.println("折合"+i1+"礼拜零"+i2+"天");
}
}
public class ArithmeticOperator{
public static void main(String[] args){
//定义一个变量保存华氏摄氏度,转换成摄氏温度的公式为:5/9*(华氏温度-100),
//请求出234.5华氏摄氏度对应的摄氏温度
double d = 234.5;
double d2 = 5/9*(234.5-100);
System.out.println("234.5华氏摄氏度对应的摄氏温度为:"+d2);
}
}
关系运算符
运算符 | 运算 | 范例 | 结果 |
== | 相等于 | 8 == 7 | false |
!= | 不等于 | 8 != 7 | true |
< | 小于 | 8 < 7 | false |
> | 大于 | 8 > 7 | true |
<= | 小于等于 | 8 <= 7 | false |
>= | 大于等于 | 8 >=7 | true |
instanceof | 检查是否是类的对象 "hsp" instanceof String true |
//演示关系运算符
public class Relationaloperator{
public static void main(String[] args){
int i1 = 8;
int i2 = 7;
System.out.println(i1 == i2);
System.out.println(i1 != i2);
System.out.println(i1 > i2);
System.out.println(i1 < i2);
System.out.println(i1 >= i2);
System.out.println(i1 <= i2);
}
}
逻辑运算符
短路与 | && | 只有真真为真有一假则为假 |
短路或 | || | 只有假假为假有一真则为真 |
取反 | ! | 当a为true结果为false |
逻辑与 | & | 只有真真为真有一假则为假 |
逻辑或 | | | 只有假假为假有一真则为真 |
逻辑异或 | ^ | 当a,b不同时结果为true,否则为false |
//演示逻辑运算符的使用
public class Logicaloperator{
public static void main(String[] args){
//短路或
int age = 18;
if (age > 2 || age < 30) {
System.out.println("OK100");
}
if (age > 20 || age < 30) {
System.out.println("OK200");
}
//两个均能正常输出
if (age > 20 || age < 10) {
System.out.println("OK300");
}
//不会被输出
int a = 4;
int b = 9;
if (age > 2 || ++b < 30) {
System.out.println("OK400");
}
System.out.print("a = "+a+"b = "+b);
//输出OK400,a=4,b=9
/*
?为什么b不会自增,因为当a判断为真时整个结果必然为真,短路或将不进行++b
*/
System.out.println("\n==============");
if (age > 2 || b++ < 30) {
System.out.println("OK500");
}
System.out.print("a = "+a+"b = "+b);
//输出OK500,a=4,b=9
System.out.println("\n==============");
if (age > 2 | ++b < 30) {
System.out.println("OK600");
}
System.out.print("a = "+a+"b = "+b);
//输出OK600,a=4,b=10
}
}
短路与常用,但是当短路与前面的条件为假时则不执行后面的条件
逻辑与则不同(傻夫夫),不管前面条件是否为假,都将执行后面的条件
短路或常用,但是当短路或前面的条件为真时将不执行后面的条件
public class Inverseoperator{
public static void main(String[] args){
System.out.println(30>20);//true
System.out.print(!(30>20));//false
boolean b = (10>1)^(3>5);//true
System.out.println("\nb = "+b);
}
}
HomeWork
public class Homework01{
public static void main(String[] args){
/*
int x = 5;
int y = 5;
if(x++ == 6 & ++y == 6){
x = 11;
}
System.out.println(" x = " + x + " y = " + y);
//逻辑与:x先比较再自增,y先自增再比较。前为假结果为假。输出结果为 x = 6 y = 6
*/
/*
int x = 5;
int y = 5;
if(x++ == 5 & ++y == 5){
x = 11;
}
System.out.println(" x = " + x + " y = " + y);
//逻辑与:x先比较再自增,y先自增再比较。前为真,后为假。输出结果为:x = 6 y = 6
*/
/*
int x = 5;
int y = 5;
if(x++ == 6 && ++y == 6){
x = 11;
}
System.out.println(" x = " + x + " y = " + y);
//短路与:x先比较再自增,y先自增再比较。但是前为假后不执行。输出结果为:x = 6 y = 5
*/
/*
int x = 5;
int y = 5;
if(x++ == 5 || ++y == 5){
x = 11;
}
System.out.println(" x = " + x + " y = " + y);
//短路或,x先比较再自增,y先自增再比较。前为真故后不执行。输出结果为:x = 11 y = 5
*/
}
}
public class Homework02{
public static void main(String[] args){
boolean x = true;
boolean y = false;
short z = 46;
if ((z ++ == 46)&&(y = true)) {
z ++;
}
System.out.println("z = "+z);
//输出结果为:z = 48?(我滴天因为后边y=true是赋值语句,所以整个结果是正确的执行if当中的z++)
if ((x = false)||(++z == 49)) {
z ++;
}
System.out.println("z = "+z);
输出结果为:z = 50√
}
}
赋值运算符
赋值运算符是将某个运算后的值,赋给指定的变量。
赋值运算符的分类
基本赋值运算符 = int a = 10
复合赋值运算符
+= , -=,*=, /=,%=等,重点讲解一个 +=,其他的使用是一个道理
a += b;[等价?]----> a = a+b
a -=b;[等价?]----> a = a-b
三元运算符
条件表达式 ?表达式1:表达式2
运算规则:
1.如果条件表达式为true,运算后的结果为表达式1
2.如果条件表达式为false,运算后结果为表达式2
public class AssignOperator{
public static void main(String[] args){
int a = 10;
int b = 99;
int result = a>b? a++:b--;
//结果为false故结果执行b--为99?前面分析正确执行b--result=b,b执行b-1故,result=b,b=b-1
System.out.println("result = "+result+",b = "+b);
int result1 = a>b? a++:--b;
System.out.println("result1 = "+result1+",b = "+b);
//结果为:result1 = 97,b = 97
}
}
double c = a>b? (int)1.1:(int)3.4;//正确
int c = a>b? 1.1:3.4;//错误
int c = a>b? (int)1.1:(int)3.4;//正确
//使用三元运算符求出三个数当中的最大值
public class Homework03{
public static void main(String[] args){
int a = 533;
int b = 432;
int c = 123;
/*
int max1 = a > b ? a:b;
int max2 = max1 > c ? max1:c;
System.out.println(max2);
*/
//用一句表达式解决
int max = (a>b ? a:b)>c?(a>b ? a:b):c;
System.out.println(max);
}
}
运算符的优先级
上一行运算符的优先级优于下一行的优先级
只有单目运算符,赋值运算符是从右向左运算的
1)(){}等
2)单目运算符 ++ --
3)算术运算符
4)移位运算符<<,>>,>>>
5)比较运算符
6)逻辑运算符
7)三元运算符
8)赋值运算符