隐式转换
将数据类型取值范围小的数据,给取值范围大的类型赋值时,会自动转换可以直接赋值。
例如
int a = 10;
double b = 10.0;
double b = a + b;
//在运算的时候会自动把变量a转为double数据再进行计算。
强制转换
byte a = 10;
byte b = 10;
byte c = a + b; //在运算a+b时, a和b都会自动转为int类型,由于c是byte类型,所以没有办法直接接收。
byte c =(byte)(a+b); //需要强制类型转换。
//或者,直接用int类型的变量去接收。
int c = a + b;
byte\char\short等数据间的运算,会自动把类型提升为int类型运算。
字符+操作
char类型运算是根据ASCII码表根据对应字符转为底层字节再运算
char a = 'a';
int b = 1;
system.out.println(a + b); //字符a对应的底层字节是97,所以会输出98。
'a'字符的底层字节是97 'A'字符的底层字节是65 'O'字符的底层自己是48
字符串+操作
//字符串可以跟 +号,跟[任意数据类型]拼接
int a = 1;
int b = 2;
system.out.println(a + "分"); //自动把a转为字符串,输出1分。
system.out.println(a + b + "分");//先执行a+b得到3,再将3转为字符串,输出3分。
system.out.println("分" + a + b);// a会被转换成字符串先跟"分"拼接在一起变为"分1",再对b做同样操作,输出分12。
数字拆分公式
个位 数值%10
十位 数值/10%10
百位 数值/10/10%
千位 数值/10/10/10%
........
原理,例如求123的十位,123除以10后会因为损失精度得到12,12模10后余2,就可以得到十位的2。
自增自减运算符
建议单独使用,常量不允许使用自增自减。
int a = 2;
system.out.println(a++); //先输出a,输出完后自增变3
system.out.println(a); //输出3
system.out.println(++a); //先自增,然后再输出4
system.out.println(a); //输出4,减法同理
基本赋值符
int a = 1;
int b = 2;
a += b // a += b等同于 a = a + b
system.out.println(a); //输出3
byte c = 1;
byte d = 2;
c += d; // c += d 等同于 c = (byte)(c + d),会自动强制转换。扩展赋值运算符底层会自带强转功能。
system.out.println(c); //输出3
逻辑运算符
//与
System.out.println(true & true); //输出true
System.out.println(true & false); //输出false
System.out.println(false & false);
//或//
System.out.println(true | true); //输出true
System.out.println(true | false); //输出true
System.out.println(false | false); //输出false
//非
System.out.println(!true); //输出false
System.out.println(!false);//输出true
//异或
System.out.println(true ^ true); //输出false
System.out.println(true ^ false); //输出true
System.out.println(false ^ false); //输出false
短路逻辑运算符
短路效果,即判断第一个条件,若不通过,则不执行后续的代码
int a = 1
int b = 2;
System.out.println(++a > 2 && b-- < 3 ); //a自增 2不大于2,短路后b没有自减
System.out.println(a); //输出2
System.out.println(b); //输出2