目录
一、算术运算符
包括加(+)减(-)乘(*)除(/)取模取余(%)
整数操作只能得到整数,要想得到小数,必须有浮点数参与运算
package com.lulu.arithmeticoperator;
import java.util.Scanner;
public class ArithmeticoperatorDemo1 {
//结论:
//1.整数参与计算,结果只能得到整数
//2.小数参与计算,结果可能不精确(后面讲精确的)
public static void main(String[] args) {
//加、减、乘
System.out.println(3 + 2); //5
System.out.println(5 - 1); //4
System.out.println(7 * 9); //63
//小数
//代码中如果有小数参与计算,结果有可能不精确
System.out.println(1.1 + 1.01); //2.1100000000000003
//除
System.out.println(10 / 2); //5
System.out.println(10 / 3); //3,因为整数参与运算只能得到整数
System.out.println(10.0 / 3); //3.3333333333333335,小数计算有可能不精确
//取模,取余。实际上也是做除法运算,但得到的是余数
//应用场景:
//1.可以用取模来判断,A是否可以被b整除
//2.判断A是否为偶数
//3.以余数分类,比如模3,分为余数为0、1、2的三类
System.out.println(10 % 2); //0
System.out.println(10 % 3); //1
}
}
二、隐式转换和强制转换
隐式转换(自动类型提升)
把一个取值范围小的数据,转成取值范围大的数据
取值范围:byte<short<int<long<float<double
隐式转换的两种提升规则:
1.取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算
2.byte short char三种类型的数据在运算时,都会提升会int,再进行运算
比如下面,byte类型的a与b相加后,得到的c是int型
byte a = 10;
byte b = 20;
c = a + b; //c为int型了
强制转换
如果把一个取值范围大的数值,赋值给取值范围小的变量。是不允许直接赋值的,如果一定要这么做,那边需要强制类型转换。(可能导致数据错误)
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据;
//比如
byte b= 1;
int a = (int)b;
//下面也是例子
byte b1 = 10;
byte b2 = 20;
int result1 = b1 + b2;
byte result2 = (byte)(b1 + b2);
三、字符串相加
"+"操作的三种情况:1.数字相加 2.字符串相加 3.字符相加
当+操作中出现字符串时,这个+是字符串连接符,而不是算术运算符。会将前后的数据进行拼接,产生一个新的字符串
"123"+123 ->"123123"
连续进行+操作时,从左到右逐个执行
1+99+"lulu"->"100lulu"
System.out.println(1 + 2 + "abc" + 1 + 2); //3abc12
但是,要记住只要没有字符串(哪怕是有字符),这里的+都不是连接符而是运算符
System.out.println('a'+'b'); //195
System.out.println("a"+"b"); //ab
上面会出现195是ascii码相加(a:97,b:98)
四、字符相加
当字符+字符或字符+数字时,会把字符通过ASCII码查询到对应的数字再计算
其中有几个比较需要记忆的:0(48),A(65),a(97)
五、自增自减运算符
自增:++,自减:--
//a++先用后加
int a = 10;
int b = a++; //10
//++a先加后用
a = 10;
b = ++a; //11
a++和++a单独使用没区别,但是赋值使用有区别
a++是先用后加,++a是先加后用
六、赋值运算符
赋值运算符有:=、+=、-=、*=、/=、%=
细节:+=、-=、*=、/=、%=底层都隐藏了一个强制类型转换,保持原来的数据类型
比如:
short s = 1;
s += 1; //s还是short类型
//等同于s = (short)(s + 1)
七、关系运算符
关系运算符有:==、!=、>、>=、<、<=
关系运算符的结果都是boolean类型,要么true,要么false
八、逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
& | 逻辑与(且) | 并且,两边都为真,结果才为真 |
| | 逻辑或 | 或者,两边都为假,结果才为假 |
^ | 逻辑异或 | 相同为false,不用为true |
! | 逻辑非 | 取反 |
九、短路逻辑运算符
为什么需要短路逻辑运算符
符号 | 作用 | 说明 |
---|---|---|
&& | 短路与 | 结果和&相同, 但是有短路效果 |
|| | 短路或 | 结果和|相同,但是有短路效果 |
简单理解,当左边的表达式能确定最终的结果,那么右边就不会参加运行了
int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b < 5;
System.out.println(result); //false
System.out.println(a); //11
System.out.println(b); //10(不会自增了)
如果是&的话,a和b就都是11,都会执行。
总结:&、|,无论左边true false,右边都会执行
&&、||,如果左边能确定整个表达式的结果,右边不执行
最常用的逻辑运算符是:&&、||、!
十、三元运算符
三元运算符的作用:可以进行判断,根据判断的结果得到不同的内容
格式:关系表达式?表达式1:表达式2;
eg:求两个数的较大值(a!=b)
int max = a > b ? a : b;
ps:ctrl+alt+L自动对齐格式化代码
十一、运算符优先级
小括号最优先
十二、原码、反码、补码
这个就不听了,用到了再学