1、位运算符
左移 有符号,无符号
右移 有符号,无符号
与 & 相乘
或 | 相加
异或 不同时为1
按位取反 ~
整数的源码和补码相同,负数的补码是源码按位取反+1,符号位不变
2、字符串
String s1="123"+100
输出结果为:123100 对字符串进行的是拼接操作(字符串本身不可变,JVM进行复制操作)
package com.xian.dao; public class Test { public static void main(String[] args) { int i=1; String s1="sdsd"; String s2=s1+"1212"; // System.out.println(s2); s2=s2+"666"; // System.out.println(s2); char c ='你'; s2=s2+c; // System.out.println(s2); double d1 =1.3232; s2=s2+d1; // System.out.println(s2); boolean b =false; System.out.println(s2); String s4; char c2='你'; s4=""+100+c2; //System.out.println(s4); } }
运行结果:sdsd1212666你1.3232
前面部分一直在插入,s4开始代码执行方式是从前向后的,即,前面是字符串自动转型字符串,前面是int自动转型int,后面字符串再用整形拼接字符串
对于字符串进行改变不建议使用String,应该使用StringBuffer或Stringbuilder
3、运算符
1.算数运算符 +、-、*、/、%、++、--
取余(牛客网 Java错题)
package com.xian.dao; public class Test001 { public static void main(String[] args) { int x=-5; int y=-12; System.out.println(y%x); } }
运行结果:-2
当余数为负数时负号忽略不计,当被余数是负数时结果需要包含负号(取决于前面那个数)
i++和++i 先逻辑后自增,先自增后逻辑
2.赋值运算符 =、+=、-=、/=、*=、%=(i+=1; // i=i+1)
3.比较运算符 >、<、>=、<=、!=、==
4.逻辑运算符 &&(短路与)、||、!、&(逻辑与)、|、异或(不同为真,相同为假)
短路与:见名知义 就是短(if(A==B && B==G))如果A!=B他就不去算了,短路或同理
5.位运算符 >>、<<、>>>、<<<
无符号左移一位相当于乘以二,两位=*4,三位=*8 (原数×2的N次方)
无符号右移一位相当于除以二,两位=除4,三位=除8
public static void main(String[] args) { int i=2; i=i<<2;//1,2,3,4 System.out.println(i); }
结果为:8
6.三目运算符 (1>2)?是的:不是 (条件为真执行“是的”,条件为假执行“不是”)
4、思考
不借助第三个变量,交换两个变量
public static void main(String[] args) { int x=5; int y=6; x=x^y; y=x^y; x=x^y; System.out.println(x); System.out.println(y); }
int a=10,b=12; //a=1010^b=1100; a=a^b; //a=0110^b=1100; b=a^b; //a=0110^b=1010; a=a^b; //a=1100=12;b=1010;
5、运算符的优先级
第一优先级 ()、{ }、[ ]、,、;
第二优先级 ++、--、~、!
第三优先级 *、/、% (第三应该是(type)强制转换数据类型)
第四优先级 +、-
第五优先级 >>、<<
第六优先级 >、<、>=、<=
第七优先级 == 、!=
第八优先级 &、|、!
第九优先级 三目运算符
第十优先级 +=、-=、*=、/=
总结:关于强制数据类型转换,他的优先级可以说是非常高
short x=2; x=(short)8*x*1.23;
由于强转优先级问题,只强转了8,计算的数值并不受影响
老师,我举报,他影响我学习