java运算符

发布于:2022-07-26 ⋅ 阅读:(424) ⋅ 点赞:(0)
  作为一门计算机语言, Java 提供了一套丰富的运算符来操纵变量。
Java 中运算符可分为以下:算术运算符 (+ - * /)、关系运算符 (< > ==) 、逻辑运算符、位运算符、
移位运算符以及条件运算符等。

算术运算符

下面是算术运算符的使用
        int a = 30;
        int b = 10;
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/b);
        System.out.println(a%b);

 加减乘除和数学里面的没有区别,取模运算相当于数学中除法的余数

下面我们看一下字符串

        String str = "ObiWan";
        System.out.println(str);

字符串相加是什么效果?

 我们可以看到他是拼接在一起了

如果字符串加数字会怎么样?

我们没有得到ObiWan30,而是得到了ObiWan1020

这是为什么?

因为:其他数据类型和字符串使用+拼接,结果就是一个字符串

那我们要是想要得到ObiWan30,怎么做呢?

 两个解决办法,第一个办法是把数字加法放到前面,第二个办法是加括号

我们想要10+20在前面还是输出1020ObiWan,怎么做呢?

我们想要输出a=10,b=20,又怎么做呢?

 第一个,我们可以给10+20的中间加上“”,中间加不加空格都可以,这样相当于数字加字符串加数字加字符串,而不是数字加数字加字符串

第二个也是同样的方法,把其中一个数字变成字符串,就可以了

我们再看一下java的转义字符

下面这些代码的输出是什么 

        String s1 = "\"bit\"";
        String s2 = "\\bit\\";
        String s3 = "\\\\bit\\\\"

答案是

\\ 代表一个反斜字符\
\" 代表一个双引号字符

那么数字可不可以转换成字符串呢?

 

 可以看到它输出了一个10

 我们借用一个String.valueof()

这个方法里面可以看到八大类型都在里面

 

 就变成了字符串

我们还可以字符串变整数

是用 Integer.valueOf

 做几个简单的数学题

        System.out.println(10%3);
        System.out.println(-10%3);
        System.out.println(10%-3);
        System.out.println(-10%-3);

答案是多少呢?

 因为java里面的,取余,求模,取模全是求余数

自增/自减运算符 ++ --

下面这段代码结果是什么
        int a = 10;
        int b = a++;
        int c = 10;
        int d = ++c;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);

 

  1. 如果单独使用,【前置++】和【后置++】没有任何区别
  2. 如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式 结束时给变量+1
  3. 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

关系运算符

关系运算符主要有六个 : == != < > <= >= ,其计算结果是 true 或者 false
使用关系运算符,其结果就有一个是布尔值
if(布尔表达式)
[表达式1 && 表达式2]   -> 这两个表达式都是布尔表达式
问,下面这段代码,什么结果,那些输出true , 那些输出false
        System.out.println(a == b);
        System.out.println(a != b);
        System.out.println(a < b);
        System.out.println(a > b);
        System.out.println(a <= b);
        System.out.println(a >= b);

逻辑运算符 

逻辑运算符主要有三个 : && || ! ,运算结果都是 boolean 类型。
语法规则:表达式 1 && 表达式 2 ,左右表达式必须是 boolean 类型的结果。
        int a = 1;
        int b = 2;
        System.out.println(a==1 && b==2);
        System.out.println(a==1 && b > 100);
        System.out.println(a>100 && b==2);
        System.out.println(a>100 && b>100);

上面代码结果是什么?

 两个表达式都为真,结果才是真,只要有一个是假,结果就是假。

逻辑 ||
语法规则:表达式 1 || 表达式 2 ,左右表达式必须是 boolean 类型的结果。
下面这段代码又是什么结果
        int a = 1;
        int b = 2;
        System.out.println(a==1 || b==2);
        System.out.println(a==1 || b > 100);
        System.out.println(a>100 || b==2);
        System.out.println(a>100 || b>100);

左右表达式至少有一个位真,则结果为真 

逻辑非 !

语法规则: ! 表达式 ,真变假,假变真。
下面这段代码结果又是什么
        int a = 1;
        System.out.println(!(a==1));
        System.out.println(!(a!=1));

 

短路求值
&& || 遵守短路求值的规则
代码结果是什么
        System.out.println(10 > 20 && 10 / 0 == 0);
        System.out.println(10 < 20 || 10 / 0 == 0);

 

我们都知道 , 计算 10 / 0 会导致程序抛出异常 . 但是上面的代码却能正常运行 , 说明 10 / 0 并没有真正被求值 .
注意 :
  1. 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
  2. 对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
  3. & 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值.

下面这段代码结果是什么?

        System.out.println(10 > 20 & 10 / 0 == 0);
        System.out.println(10 > 20 | 10 / 0 == 0);

 

位运算符

 移位运算

移位运算符有三个 : << >> >>> ,都是二元运算符,且都是按照二进制比特位来运算的。
1. 左移 << : 最左侧位不要了, 最右侧补 0.
注意: 向左移位时,丢弃的是符号位,因此正数左移可能会编程负数

 

2. 右移 >> : 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

 

无符号右移 >>>: 最右侧位不要了, 最左侧补 0.
1111 1111 >>> 1 -> 0111 1111
注意 :
1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
4. 移动负数位或者移位位数过大都没有意义.

条件运算符:三目运算符

表达式1?表达式2:表达式3

表达式为布尔表达式

运算符的优先级

注意:运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可.