java 运算符进阶
位移运算符
- x >> y : 右移运算符:
- 二进制中运算 :右移 y 个位;左边(缺失)补符号位;
- 实际数值(十进制):右移 y 个位,相当于 :x 除以 (2^y) 的结果;
- x << y : 左移运算符:
- 二进制中运算:左移 y 位;右边(缺失)朴符号位:
- 实际数值(十进制):左移 y 位,相当于:x 乘以(2^y) 的结果:
- x>>> 1 无符号右移;只补 0;因为无符号吗,
代码:
public class Study3 {
/*位移运算符*/
public static void main (String[] args) {
/*String[] args 运行命令行参数*/
System.out.println(11 >> 1); // 右移 相当于除法 11/(2^1) ;11/2= 5
System.out.println(11 >> 2); // 11/4=2
System.out.println(11 << 1); // 左移,相当于乘以 11*(2^2); 11*2 = 22
System.out.println(11 << 2); // 11*2*2=44;
}
}
结果:
字符串连接符
- + 运算在执行字符串的拼接和数值加法运算时,是从左侧开始按顺序 执行的。这与平常的加法运算一样(一般来说,a+b+c可以看作是 (a+b+c)
- 注意:不要写成了 - 减号:字符串无法减去数值的,会报错的
代码 1
public class Study3 {
/*字符串连接符*/
public static void main (String[] args) {
System.out.println("57 + 23 ="+57+23); // 57+23=5723
System.out.println(57+23+"= 57 + 23"); // 80=57+23
System.out.println("57 + 23 ="+(57+23)); // 57+23=80
}
}
结果1:
解析1:
-
上述代码:第 4 行代码,因为 + 运算是从左侧到右侧的,(没有括号)由于这是**”字符串+数值“** 的运算,因此 57 就会转换为字符串 57 之后再进行拼接。运算的结果为字符串,先计算单个的 ** ”+57“ 得字符串** :
57+23=57 : 再算 ”+23“ 得字符串 : 57+23=5723:
-
上述代码:第 5 行代码,同理 + 运算是从左侧到右侧得,由于这是**”字符串+数值“** 的运算,因此 “57+23的的结果” 就会转换为字符串 80 之后再进行拼接。运算的结果为字符串 :80=57+23
代码2:
public class Study3 {
/*字符串连接符再探究*/
public static void main (String[] args) {
System.out.println("57-32 = "+(57-32)); // 25
System.out.println("57-32 = "+ 57-23); // 报错,字符串无法减去数值;
}
}
结果2:
解析2:
- 上述代码:第 5 行代码,这个程序是错误的,编译时会发生错误,原因如下:
- 同理 因为 + 的运算是从左侧向右侧的,首先会执行左侧的**”57+23=+57“** 的运算。由于这是**”字符串+数值“** 的运算,因此 57 就会转换为字符串 57 之后再进行拼接。运算的结果为字符串”57-32 = 57“
- 接下来会执行右侧的 ”57 - 32 = 57“ - 32 的运算,这是 ”字符串 - 数值“ 的 运算。注意:字符串是无法减去数值, 因此,编译时就会发生错误:
结论:
运用字符串连接符 不要节约你得括号得使用
条件运算符(三目运算符)
- x(表达式) ? y(真true) : z(假false) ** ;x 表达式为真(true)** ;结果为 y, x 表达式为假(false) ,结果为 z
- 注意;是 : 双引号 ,不是分号,逗号;
代码:
public class Study3 {
/*对条件运算符(三目运算符)的探究*/
public static void main (String[] args) {
int score = 100;
String type = score < 60 ? "不及格":"及格" ;
System.out.println(type);
}
}
结果:
最后:
限于自身的水平,对其中存在的纰漏甚至错误,希望各位朋友,能给予指教,我会加以改正,谢谢大家!