加减乘除,这是我们小学就学过的数学运算。
那么在程序里又有哪些运算呢?
一、算数运算符
-
加法运算:+(若是字符串连接运算)
-
减法运算:-
-
乘法运算:*
-
除法运算:/
-
取模运算:%(两个数字相除取余数)
-
自增自减运算:++、- -
这些加减乘除取模其实就和小学数学学到的功能是差不多的。
昨天的学习中做过测试:
知道了byte、short、char类型,它们在运算时会自动转换为int。
那如果是int和double类型的呢?
测试:
double d=100;
int i=10;
// int i2=d1+i1;//错误: 不兼容的类型: 从double转换到int可能会有损失
double i2=d1+i1;
从中我们就能看到,一个int类型的数和一个double类型的数相加时,会变成double类型。
原来当算术运算两侧的类型不一致的时候,结果和大类型保持一致
。
++、-- 运算符
++运算,变量自增长1;- -运算,变量自减少1。
那么如果有一个变量i,++i和i++有什么区别呢?
独立运算时:i++和++i没有区别,都是实现自动加1的功能
混合运算时:i++和++i就不同了
1.++/- -在先,先运算后取值
int i1 = 1;
int i2 = ++i1;
System.out.println(i1);//计算结果是2
System.out.println(i2);//计算结果是2
2.++/–在后,后运算先取值
int i1 = 1;
int i2 = i1++;//这就等价于 int i2=i1;i1=i1+1;
System.out.println(i1);//计算结果是2
System.out.println(i2);//计算结果是1
后++/- -时,就相当于变量i1先把值赋给i2,再自增1;
字符串之间进行+运算时,是拼接操作
为何得出的结果是1+1=11?
因为“1+1=”这是一个字符串,它在与后面的1运算时是拼接运算的。
那如何让其显示出正确的答案呢?
用括号提高后面1+1的运算优先级就好了。
二、赋值运算符
- 等于号:=(用于给变量赋值)
- 加等于:+=
- 减等于:-=
- 乘等于:*=
- 除等于:/=
- 取模等于:%=
+= ,-=,*=,/=,%=:
运算符和赋值符的结合使用,变量自身参与运算,结果赋值返回给自身
int i=10;
i1=i+10;//这行就可以写成i+=10,
System.out.println(i);
+= ,-=,*=,/=,%=:自动类型强转功能
赋值运算符在运算过程中,若是涉及到值强转,会自动操作
byte b=1;
b+=256;//可以理解成byte b = (byte)257
System.out.println(b)//所以值为1而不是257,int类型被强转成byte了
int i=10;
i+=3.14;//可以理解成int i =(int)13.14
System.out.println(i)//所以值为13而不是13.14,double类型被强转了
三、比较运算符
- 等等于:==(如果判断正确结果为true)
- 小于号:<
- 大于号:>
- 小于等于:<=
- 大于等于:>=
- 不等于:!=
比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值true或者false
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
}
四、逻辑运算符
- 双与:&&(全真才是真)
- 单与:&(全真才是真)
- 双或:||(全假才是假)
- 单或:|(全假才是假)
- 取反:!
其实也就是数学里面学到的逻辑运算:与、或、非
//逻辑与&&(并且) 一假即假,全真才是真
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
那么&&与&有何区别呢?
做个测试:
小结:
- 双与:一假即假,若前面为假,后面不用运算
- 单与:一假即假,无论结果是啥,都会运算完
- 双或:一真即真,若前面为真,后面不用运算
- 但或,一真即真,无论结果是啥,都会运算完
五、三元运算符
我们都接触过考试,一般都是60分及格。
也就是说分数大于或等于60时,及格;分数小于60时,不及格。
这种在生活中常见的情况在程序里是如何表现的的?
这就需要三元运算符了。
当一个布尔表达式的结果分别对应两种情况时,可以使用三元表达式。