算术运算符
import java.util.Scanner;
/*
将华氏温度转换为摄氏温度,celsius=(5/9)(fahrenheit-32)
*/
class Demo03{
public static void main(String[] args){
//double a=5/9;//0.0
//double b=5.0/9;//0.5555555555555556
System.out.println(a);
System.out.println(b);
Scanner input=new Scanner(System.in);
System.out.print("Enter a degree in Fahrenheit:");
double fahrenheit=input.nextDouble();
double celsius=(5.0/9)*(fahrenheit-32);
System.out.println("Fahrenheit "+fahrenheit+" is "+celsius+" in Celsius");
}
}
class Demo04{
//i++ 先调用,再自身+1; i-- 先调用,在自身-1
//++i 自身直接+1;--i
public static void main(String[] args){
int i=3;
System.out.println(i++);//3
System.out.println(++i);//5
i++;//i=6
System.out.println(i);//6
int j=i++;
System.out.println(j);//6
System.out.println(i);//7
i=1;
int n=++i + i++ + ++i;//2+2+4=8
System.out.println(n);
}
}
- i++,调用时,先产生一个临时存储区域,调用就读取这个临时存储区域,如上述int i=3;当输出i++时,先创建一个临时存储区域,将i=3存入,输出结果为3,i变为了3+1=4;
- 计算int n=++i + i++ + ++i;//2+2+4=8;注意 i 值的变化。
赋值运算符
class Demo05{
public static void main(String[] args){
byte b=1;
//b=b+2;//错误: 不兼容的类型: 从int转换到byte可能会有损失
b+=2;
System.out.print(b);//3
}
}
- b=b+2//编译失败,因为b会因为int类型2被提升为int类型,运算后的结果还是int类型。无法赋值给bytet类型。
- b+=2//编译通过,因为+=运算符在给b赋值时,自动完成了强转操作
- 注意
赋值号和算数运算符的混合运算属于一个运算符,不能拆分。并且这个符号会完成自动强转动作
比较运算符
- 注意
比较运算符,计算的结果一定是布尔类型
== 不要误写为 =
== 比较的是操作数的地址;equals() 比的是内容
逻辑运算符
- “&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
- “|”和“||”的区别同理,双或时,左边为真,右边不参与运算
class Demo06{
public static void main(String[] args){
System.out.println(7==7);//true
System.out.println(7==8); //false
String s1="bbb";
String s2="abc";
System.out.println(s1==s2); //false
System.out.println('a'>'b'); //false
//System.out.println(s1>s2); 二元运算符 '>' 的操作数类型错误
System.out.println(s2.compareTo(s1));//-1,比较字符串,如果s2在s1前面输出-1,相等0,后面为1
System.out.println(true==false);//false
//System.out.println(true>false);//二元运算符 '>' 的操作数类型错误
int i=0;
int j=0;
System.out.println(i++ > 0 && j++>0);//false && false,当&&时,前者为false,后者不参与运算
System.out.println(i);//1
System.out.println(j);//0
System.out.println(true^true); //false,同者false,异者true
int a=7; //0111
int b=10;//1010
System.out.println(a>1&b<20);//true
System.out.println(a&b);//2
/*
0111
&1010
0010
*/
System.out.println(a|b);//15
/*
0111
|1010
1111
*/
System.out.println(a^b);//同者为0(逻辑比较中为false),异者为1(逻辑比较中为true),结果为13
/*
0111
^1010
1101
*/
//交换两个变量的值
a=3;
b=7;
//1.中间值
/*
int temp=a;
a=b;
b=temp;
*/
//2.加减法 数字
/*
a=a+b; //a=10
b=a-b; //b=10-7=3
a=a-b; //a=10-3=7
*/
//3.异或 数字
a=a^b;
/*
0011
0111
0100 a 4
*/
b=a^b;
/*
0100
0111
0011 b 3
*/
a=a^b;
/*
0100
0011
0111 a 7
*/
}
}
移位运算符
- 13<<2: 13左移2位
____00000000_00000000_00000000_00001101
__0000000000_00000000_00000000_00110100
结果等于52(13*2^2)
相当于给原数乘以2的倍数(位移数) - 13>>2: 13右移2位
__00000000_00000000_00000000_00001101
__00000000_00000000_00000000_0000001101
结果等于3(13/2^2)
相当于给原数除以2的倍数(位移数)
三元运算符
- 三元运算符,也称为三目运算符或问号冒号运算符。"?" ":"一起出现,称为条件操作符。有三个表达式参与的运算表达式。既然是个运算符,那么运算完必须有运算结果。
- 三元运算符的格式
(表达式1)?表达式2:表达式3; - 三元运算符的运算原则
1.表达式1运算结果必须为boolean类型的值
2.当表达式1的结果为true时,表达式2的运算结果就为整个三元运算符的结果
3.当表达式1的结果为false时,表达式3的运算结果就为整个三元运算符的结果
//下面的语句在x大于0时给y赋值1;当x小于0时给y赋值-1
y=(x>0)?1:-1;
//如果num是偶数,下面的语句就显示信息“num is even”;否则显示“num is odd”;
System.out.println((num%2==0))?"num is even":"num is odd";
操作符优先级表
-
该表引用Java语言程序设计与数据结构(基础篇),机械工业出版社第3章
-
从上到下按优先级递减方式排列
-
逻辑操作符的优先级比关系操作符的低
-
关系(比较)操作符的优先级比算术运算符的低
-
赋值操作符的优先级是最低的
-
优先级相同的操作符在同一行
&& 的优先级比 || 高
class Demo07{
public static void main(String[] args){
//逻辑与的优先级比逻辑或高
System.out.println(true||true&&false);//true
System.out.println(true&&true||false);//true
System.out.println(true||(true&&false));//true
System.out.println((true||true)&&false);//false
}
}