第二章 运算符
2.1 算数运算符
Java中,整数使用以上运算符,无论怎么计算,也不会得到小数。
public static void main(String[] args) {
int i = 1234;
System.out.println(i/1000*1000); //计算结果是1000
}
++ 运算,变量自己增长1。反之, – 运算,变量自己减少1,用法与 ++ 一致。
独立运算: 变量在独立运算时, 前++ 和 后++ 没有区别 。
变量 前++ :例如 ++i 。
变量 后++ :例如 i++ 。
混合运算:
和其他变量放在一起, 前++ 和 后++ 就产生了不同。
变量 前++ :变量a自己加1,将加1后的结果赋值给b,也就是说a先计算。a和b的结果都是2。
public static void main(String[] args) {
int a = 1;
int b = ++a;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是2
}
变量 后++ :变量a先把自己的值1,赋值给变量b,此时变量b的值就是1,变量a自己再加1。a的结果是2,b 的结果是1。
注意:只有变量才能使用自加自减运算符,比如30++这个语句是不对的。
public static void main(String[] args) {
int a = 1;
int b = a++;
System.out.println(a);//计算结果是2
System.out.println(b);//计算结果是1
}
+ 符号在字符串中的操作:
+ 符号在遇到字符串的时候,表示连接、拼接的含义。
“a”+"b"的结果是“ab”,连接含义
注意:任何数据类型与字符串连接都会变成字符串,比如Java+20 结果为Java20
优先级问题:
Java+20+30结果为多少?
答案为Java2030而不是Java50,这里就涉及到运算优先级的问题。
如果Java+(20+30)结果即为Java50
运算优先级有十多种,没有必要去背诵,只要记住小括号里面的优先计算就可以了,不确定优先级时使用小括号对数据进行处理即可。
public static void main(String[] args){
System.out.println("5+5="+5+5);//输出5+5=55
}
2.2 赋值运算符
赋值运算符,就是将符号右边的值,赋给左边的变量。
注意:只有变量才能使用赋值运算符
public static void main(String[] args){
int i = 5;
i+=5;//计算方式 i=i+5 变量i先加5,再赋值变量i
System.out.println(i); //输出结果是10
}
关于赋值运算符需要理解的一点
赋值运算符隐含了一个强制类型转换,下面我们看一个例子
num=num+1中,1为int类型,num为byte类型,编译过程中并没有报错,说明进行了强制类型转换,这是赋值运算符所隐含的,是编译器的功劳。
2.3 比较运算符
比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false 。
程序当中不允许1<x<3这种写法!
public static void main(String[] args) {
System.out.println(1==1);//true
System.out.println(1<2);//true
System.out.println(3>4);//false
System.out.println(3<=4);//true
System.out.println(3>=4);//false
System.out.println(3!=4);//true }
2.4 逻辑运算符
逻辑运算符,是用来连接两个布尔类型结果的运算符,运算结果都是布尔值 true 或者 false
public static void main(String[] args) { System.out.println(true && true);//true
System.out.println(true && false);//false
System.out.println(false && true);//false,右边不计算
System.out.println(false || false);//falase
System.out.println(false || true);//true
System.out.println(true || false);//true,右边不计算
System.out.println(!false);//true }
逻辑运算符的短路现象: 当&&与| |同时出现时,如果前面的运算符已经能够决定结果,那就没有必要再进行后面的运算了。 举个例子
System.out.println(4>5&&++a<19);
这条语句中,前面的4>5结果显然是false,根据&&运算符即可知道结果为false,没有必要进行后面的运算了,这种现象称为 短路现象
2.5 三元运算符
一元运算符:只有一个数据就可以进行操作,如++,–,!;
二元运算符:需要两个数据才可以进行操作,如:+,-,==,!=‘等等
三元运算符:需要三个数据才可以进行操作。
三元运算符格式:
数据类型 变量名 = 布尔类型表达式?结果1:结果2
三元运算符计算方式:
布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
public static void main(String[] args) {
int i = (1==2 ? 100 : 200);
System.out.println(i);//200
int j = (3<=4 ? 500 : 600);
System.out.println(j);//500
}
注意:三元运算符必须同时保证表达式A和表达式B都符合左侧数据类型要求,
错误例子:int max=2 > 3 ? 2.5 : 5;
有同学可能会说,这个2>3肯定不成立,那么肯定取5,类型一样怎么就错了呢?
这是因为为了理解方便使用了具体数字作为例子,三元运算符都是针对变量来的,如果是具体数字那么又何必使用三元运算符呢,因为无法知道变量的具体数值,所以我们使用三元运算符时要保证前后数据类型一致。