—— 目录 ——
◉ Java运算符(与C作比较)
(一)取余 % 可以对整型取余,也可以对实型取余
float a = 2.5f;
double b = 1.2;
double c = a % b;
System.out.println(c);
此段代码合法
运行结果: 0.10000000000000009
后面的 9 是精度不足导致的
— [ C语言 ] 取余 % 两边必须为整型,否则报错
(二)加号 + 可以做加法运算和连接运算
String a = "aa";
String b = "bb";
String c = a + b;
System.out.println(c);
此段代码合法
运行结果: aabb
— [ C语言 ] 加号 + 只能进行加法运算,连接字符串需要用函数strcat
(三)拓展赋值运算符自带类型转换
作为面试题出现过哦,请注意!
经常会听老师说
a += b; 和 a = a + b; 是等价的
但其实不然,只能说在一定情况下是这样
java中真正的等价应该是 type a += b; 和 type a = (type)(a + b);
其中type是类型,下面举个例子证明
byte a = 5;
a += 5;
byte b = 5;
b =(byte)(b + 5);
byte c = 5;
c = c + 5;
运行结果: a = 10, b = 10, c编译不通过
解析: 字面值 5 默认为整型,直接赋值给 byte 没问题这个是例外,但如果有其他变量参与将自动转化为 int 或更高的long,这时编译将出错,如c就是如此。但a+=5;却通过编译了,说明已经发生如b的强制类型转化。
— [ C语言 ] 没有报错,会自动进行强制转化
(四)位运算符与逻辑运算符注意
! & | ^ 既是位运算符也是逻辑运算符
而&& || 只能是逻辑运算符
异同点: & 和 && 的运算结果相同,只不过&&有短路现象,当第一个为假时,后一个就不再判断,而&则没有这种特性,两边都会判断一次。||和|也同理。
int x = 5, y = 5;
boolean a = x > 3 || (++x) > 6;
boolean b = y > 3 | (++y) > 6;
System.out.println(x);
System.out.println(y);
运行结果: 5 6
解析: 可以看到 || 发生了短路,在判断 x>3 成立后直接返回true,++x并没有执行到。而 | 没有短路功能,两边都会判断1次。(&和&&同理)
其余注解
! : 原来是true,就变成false;原来是false,就变成true。
^ : 两个操作数不同时,得到结果是true;相同时,得到结果是false
— [ C语言 ] 在这里与Java一样
(五)单一字面值不可以作为语句
4;
这个在java中会提示 “不是语句” 的错误
也许这样写很容易看出,但如果写成:
int x = 5;
x > 3 ? "大于3":"小于3";
这样我们很容易错判第二句是一个语句,实际上它就是单一的字符串,不能作为语句,会报错,考试要十分注意!!
— [ C语言 ] 值加分号无语法错误,如写 4; 是合法的
(六)借助位运算快速执行乘法
面试题可能会问到:计算 3*4 最快的方法是什么
这时的标准答案肯定是位运算了
int x = 3;
x = x << 2;
System.out.println(x);
运行结果: 12
数值在计算机中以二进制形式存储
左移1位相当于乘以2,右移1位则是除以2。
那么左移2位自然就是乘以4了
以计算机最熟悉的方式计算,就是最快的
生命的双螺旋,编织永恒的轨迹(寒冰小澈)