int x =1;
double y =2.0d;
double z = -y+x;
System.out.println(z);
这样输出的是:-1.0
int x =1;
double y =-2.0d;
double z = -y+x;
System.out.println(z);
这样输出的是:3.0
都是什么道理呢? 求一篇介绍运算符的文章
------解决方案--------------------
减号“-”,在双目运算时,是减号;单目运算时是“取负”;就这么简单了。。。
int x =1;
double y =2.0d;
double z = -y+x; // => -2 + 1 => -1
------解决方案--------------------
Java 中共有 54 种运算符,按优先级可以分为 14 级,详见如下(原来整理的,独家提供,供为参考):
- Java code
优先级 操作符 含义 关联性 用法 ----------------------------1 [ ] 数组下标 左 array_name[expr] . 成员选择 左 object.member ( ) 方法参数 左 method_name(expr_list) ( ) 实例构造 左 class_name(expr_list) ++ 后缀自增 左 lvalue++ -- 后缀自减 左 lvalue-- 2 ++ 前缀自增 右 ++rvalue -- 前缀自减 右 --lvalue ~ 按位取反 右 ~expr ! 逻辑非 右 !expr + 一元加 右 +expr - 一元减 右 -expr 3 ( ) 强制转换 右 (type)expr new 对象实例化 右 new type() new type(expr_list) new type[expr] 4 * 乘 左 expr * expr / 除 左 expr / expr % 求余 左 expr % expr 5 + 加 左 expr + expr - 减 左 expr - expr + 字符串连接 左 strExpr + strExpr 6 >> 有符号右移 左 expr >> distance >>> 无符号右移 左 expr >>> distance 7 < 小于 左 expr < expr <= 小于等于 左 expr <= expr > 大于 左 expr > expr >= 大于等于 左 expr >= expr instanceof 类型比较 左 ref instanceof refType == 等于 左 expr == expr != 不等于 左 expr != expr 8 & 整数按位与 左 integralExpr & integralExpr & 布尔与 左 booleanExpr & booleanExpr 9 ^ 整数按位异或 左 integralExpr ^ integralExpr ^ 布尔异或 左 booleanExpr ^ booleanExpr 10 | 整数按位或 左 integralExpr | integralExpr | 布尔或 左 booleanExpr | booleanExpr 11 && 逻辑与 左 booleanExpr && booleanExpr 12 || 逻辑或 左 booleanExpr || booleanExpr 13 ? : 条件运算 右 booleanExpr ? expr : expr 14 = 赋值 右 lvalue = expr *= 乘赋值 右 lvalue *= expr /= 除赋值 右 lvalue /= expr %= 模赋值 右 lvalue %= expr += 加赋值 右 lvalue += expr += 字符串连接赋值 右 lvalue += expr -= 减赋值 右 lvalue -= expr <<= 左移赋值 右 lvalue <<= expr >>= 有符号右移赋值 右 lvalue >>= expr >>>= 无符号右移赋值 右 lvalue >>>= expr &= 整数按位与赋值 右 lvalue &= expr &= 布尔与赋值 右 lvalue &= expr |= 整数按位或赋值 右 lvalue |= expr |= 布尔或赋值 右 lvalue |= expr ^= 整数按位异或赋值 右 lvalue ^= expr ^= 布尔异或赋值 右 lvalue ^= expr