电话
400 9058 355
Java运算符共分为7大类:算术、关系、位、逻辑、赋值、条件、其他(如instanceof、->);其中++/--兼具算术与一元特性,复合赋值隐含类型转换,==比较引用而非内容。
Java运算符共分为7大类,不是6类也不是8类——这是JDK规范和《Java语言规范》明确划分的,实际编码中必须按这个结构理解,否则容易混淆行为逻辑。
算术运算符:+、-、*、/、%、++、--(注意:++/--既算算术又属一元运算)关系运算符:==、!=、>、=、boolean,且==对引用类型比较的是地址)逻辑运算
符:&&、||、!(短路)、&、|、^(非短路,也用于位运算)位运算符:&、|、^、~、>、>>>(注意>> 是无符号右移,>>带符号)赋值运算符:=、+=、-=、*=、/=、%=、&=、|=、^=、>=、>>>=(共12个,不是只有+=那些)条件运算符:? :(唯一三元运算符,两个分支表达式类型需兼容)其他运算符:instanceof(类型检查)、->(Lambda参数与体分隔)==不能直接比字符串?因为==在Java中永远比较的是引用是否指向同一块内存,而不是内容是否相等。String是引用类型,字面量常量池里的"abc"和new String("abc")用==结果一定是false。
.equals(),如str1.equals(str2)
null,推荐用Objects.equals(str1, str2)避免NPE==只适合基本类型(如int a == int b)或确认是同一对象引用的场景(比如单例判断)i++ + ++i这种写法到底怎么算?这不是“面试题陷阱”,而是真实会引发维护灾难的写法——它依赖求值顺序,而Java虽定义了操作数从左到右求值,但自增副作用的时机叠加会让结果极难推演,且不同JDK版本优化下行为未必一致。
int i = 3; int x = i++ + ++i;为例:
→ 先取i++的值3,然后i变成4;
→ 再执行++i,i先变5再取值5;
→ 所以x = 3 + 5 = 8(不是7,上文某些资料示例有误)Assignment has no effect或Expression has no effect
int temp = i;
i++;
i++;
int x = temp + i;
b += 2为什么比b = b + 2更安全?因为+=等复合赋值运算符隐含强制类型转换,而+是纯算术运算,会触发类型提升规则,导致编译失败。
byte b = 1; b += 2; ✅ 合法,等价于b = (byte)(b + 2)
byte b = 1; b = b + 2; ❌ 编译报错:`possible loss of precision`,因为b + 2被提升为int,不能直接赋给byte
short、char等窄类型变量最易被忽略的一点:位运算符&、|、^在布尔表达式里是非短路的,和&&、||行为完全不同——如果你写了methodA() & methodB(),哪怕methodA()返回false,methodB()依然会被调用。这点在含副作用的函数调用中极易埋雷。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...