MacOs-JAVA开发4-运算符
运算符的优先级
算术运算符
+、-、*、/ %
System.out.println(1+1);
System.out.println(1-1);
System.out.println(5*6);
System.out.println(9/6);//整数参与运算,没有保留小数
//取余数 取模
System.out.println(9%6);//3
System.out.println(9%3);//0
赋值运算符
=、+=、-=、*=、/=、%=
System.out.println(1+1);
System.out.println(1-1);
System.out.println(5*6);
System.out.println(9/6);//整数参与运算,没有保留小数
//取余数 取模
System.out.println(9%6);//3
System.out.println(9%3);//0
//赋值操作 =赋值运算符
int num=100;
//其它的进阶的赋值运算符
int a=3;
//变量在参与运算的时候是变量里面装的常量进行的运算
//右边先进行运算,运算完的结果赋值给左边
a=a+3;
System.out.println(a);//6
int b=3;
b+=3;//简化写法 b=b+3
System.out.println(b);
int c=6;
c/=2;//c=c/2
System.out.println(c);//3
// *= %=
int d=9;
d%=2;//d=d%2 => 9%2
System.out.println(d);//1
+=符号的扩展
下面的程序有问题吗?
public static void main(String[] args){
short s = 1;
s+=1; // s = s+1;
System.out.println(s);
}
分析: s += 1 逻辑上看作是 s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型。但是, s=s+1进行两次运算 , += 是一个运算符,只运算一次,并带有强制转换的特点,也就是说 s += 1 就是 s = (short)(s + 1) ,因此程序没有问题编译通过,运行结果是2.
一元运算符
++ 、 –
public class Demo05 {
public static void main(String[] args) {
/*如果=赋值运算符和++单目运算符出现在两条语句中,
* ++k或者是k++,都是自增一,没有任何区别
*/
int k = 10;
k++;
System.out.println(k);//11
int j = 10;
++j;
System.out.println(j);//11
/*
* 如果=赋值运算符和++单目运算符出现在一条语句中,
*/
int i = 10;
int i1 = i++;//++放在变量名后面,是先赋值再自增一,先把i的值赋值给i1,然后i再自增一
System.out.println(i1);//10
System.out.println(i);//11
int n = 10;
int n1 = ++n;//++放在变量名前面,是先自增一再赋值,n先自增一再赋值给n1
System.out.println(n1);//11
System.out.println(n);//11
int m = 10;
m = m++;//和JVM虚拟机的内存——栈中存储时指令先后顺序有关
System.out.println(m);//10
int m1 = 10;
m1 = ++m1;//和JVM虚拟机的内存——栈中存储时指令先后顺序有关
System.out.println(m1);//11
/*
* 2.4)特殊情况——System.out.println()
*/
int l = 10;
System.out.println(l++);//10 单目运算符++放在变量后面是先输出再自增一
System.out.println(l);//11
int l1 = 10;
System.out.println(++l1);//11 单目运算符++放在变量前面是先自增一再输出
}
}
关系运算符
关系运算符:(流程控制语句中常用)
- == > < >= <= !=
- 结果是布尔值 true/false
比较运算符
比较运算符的结果是一个布尔类型 true真 false假
//比较运算符
public class Demo08 {
public static void main(String[] args) {
int a=1;
int b=1;
//== 判断是否相等 相等返回true
//变量里面装的东西进行比较
System.out.println(a==b);//true
System.out.println(1==1);//true
//大于 >
System.out.println(5>3);//true
//大于等于 >=
System.out.println(5>=5);//true
// < <=
System.out.println(3<5);//true
//!= 不等于
System.out.println(3!=5);//true
}
}
逻辑运算符
& && | || !
- 逻辑运算符:(流程控制语句中常用)
- &&:短路与——两边都是true,结果才为true;有一边是false,结果就为false
- &:逻辑与——两边都是true,结果才为true;有一边是false,结果就为false
- ||:短路或——两边都是false,结果才为false;有一边是true,结果就为true
- | :逻辑或——两边都是false,结果才为false;有一边是true,结果就为true
- ! :非/取反
- ^ :异或——符号两边的布尔值不同输出是true,如果两边的布尔值相同输出结果是false
/*
位运算是直接对二进制补码进行运算。(了解)
结论:
&:有0则0
|:有1则1
^:相同则0,不同则1
*/
public class Study {
public static void main(String[] args) {
//1. & |
System.out.println(true&true);//true
System.out.println(true&false);//false
System.out.println(false&true);//false
System.out.println(false&false);//false
System.out.println(false|false);//false
System.out.println(true|true);//true
System.out.println(true|false);//true
//2.&&和&的区别
//笔试题:以下代码的输出结果?
/*
* 逻辑与不智能,即使&前面的表达式为false,也会继续向下执行
*/
int a = 10;
int b = 8;
System.out.println((a<b)&(++a<b));//false (++a<b)执行了
System.out.println(a);//11
System.out.println(b);//8
/*
* 短路与比较智能,一旦&&前面的表达式为false,结果就是false,就不会继续向下执行
*/
int a1 = 10;
int b1 = 8;
System.out.println((a1<b1)&&(++a1<b1));//false (++a1<b1)并没有执行
System.out.println(a1);//10
System.out.println(b1);//8
//3.||和|的区别
/*
* 短路或||比较智能,一旦||前面的表达式为true,结果就是true,就不会继续向下执行
* 逻辑或|不知能,即使|前面的表达式为true,也会继续向下执行
*/
//4.^ !
System.out.println(!true);//false
System.out.println(true^false);//true
System.out.println(true^true);//false
System.out.println(false^false);//false
System.out.println(16^20);//4 10000 ^ 10100 = 00100->4
}
}
三元运算符和字符串连接符
-
1.字符串连接运算符:+
-
当+两边都是数据值(1,20,-19)的时候,这个+是算术运算符,它的结果就是两个数据值的和
-
当+两边有一边是字符串或者两边都是字符串的时候,这个+是字符串连接运算符,
-
它的结果是字符串拼接后的结果,拼接后还是一个字符串
-
注意:
-
字符串连接从左往右依次连接,如果想优先计算某一部分需要加上小括号,因为小括号优先级最高!!!
-
2.三元(目)运算符: ? :——重要!!!
-
三元(目)表达式: 数据类型 变量名 = 布尔类型表达式?结果1:结果2;
-
布尔类型表达式结果为true就执行:前边的结果1,否则就执行:后面的结果2
public class Study {
public static void main(String[] args) {
//1.+
int a = 1;
int b = 2;
System.out.println(a+b);//3
System.out.println(1+"123");//1123
System.out.println(10+20+"10+20"+30);//3010+2030
System.out.println("a+b="+a+b);//a+b=12
System.out.println("a+b="+(a+b));//a+b=3
//2.三元(目)表达式,和明天要学习的if else语句可以互换,在实际工作中经常用到的!!!
int i = (a<b)?1:0;
System.out.println(i);//1
}
}