加减乘除,这是我们小学就学过的数学运算。
那么在程序里又有哪些运算呢?
这些加减乘除取模其实就和小学数学学到的功能是差不多的。
昨天的学习中做过测试:
知道了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或者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时,不及格。
这种在生活中常见的情况在程序里是如何表现的的?
这就需要三元运算符了。
当一个布尔表达式的结果分别对应两种情况时,可以使用三元表达式。
总结