【Java之轨迹】第一章:运算符总结(当C语言遇上Java)

—— 目录 ——

    • ◉ Java运算符(与C作比较)
    • (一)取余 % 可以对整型取余,也可以对实型取余
    • (二)加号 + 可以做加法运算和连接运算
    • (三)拓展赋值运算符自带类型转换
    • (四)位运算符与逻辑运算符注意
    • (五)单一字面值不可以作为语句
    • (六)借助位运算快速执行乘法

◉ 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了
以计算机最熟悉的方式计算,就是最快的


生命的双螺旋,编织永恒的轨迹(寒冰小澈)

你可能感兴趣的:(笔记,实战经验,【Java之轨迹】系列,java,c语言)