Java学习3--运算符

本文详细介绍了Java中的各种运算符,包括算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符以及运算符优先级,并通过实例演示了它们的用法和注意事项。还提到了IDEA中的快捷键和运算符的特殊行为,如三元运算符和无符号右移运算符。
摘要由CSDN通过智能技术生成

运算符

java语言支持如下运算符

  • 算术运算符+, -, *, /, %, ++, –
  • 赋值运算符=
  • 关系运算符>,<,>=, <=, ==, !=, instanceof
  • 逻辑运算符&&, ||, !
  • 位运算符&, |, ^, ~, >>, <<, >>>(了解)
  • 条件运算符?:
  • 扩展赋值运算符+=, -=, *=, /=

IDEA快捷键:复制当前行到下一行ctrl+D

    • 下面开始分类讲解:
算术运算符+, -, *, /, %, ++, –
赋值运算符=
关系运算符>, <, >=, <=, ==, !=, instanceof

运算举例

package operator;

public class Demo01 {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = 30;
        int d = 40;
        System.out.println(a+b);
        System.out.println(a-b);
        System.out.println(a*b);
        System.out.println(a/b);
        System.out.println(a/(double)b);
    }
}

计算结果

30
-10
200
0
0.5


注意:
观察到a/b得到0, 原因是两个int除完得到0.5
由于结果是int型,将0.5int 所以得到了0

举例

public class Demo01 {
    public static void main(String[] args) {
        long a = 123367484858697079L;
        int b = 66;
        short c = 30;
        byte d = 4;
        System.out.println(a+b+c+d);
        System.out.println(b+c+d);
        System.out.println(c+d);
      

    }
}


结果

123367484858697179
100
34

注意到如果使用了
System.out.println((String)(c+d));
系统报错无法将int转换成String
注意:所有计算,如果没有更高级别的类型比如double/float/long,默认为int类型
比如byte+short,在计算里就会将结果按照int来算

比如你让byte+short计算强制转换String,就会报错can not cast int into String

知识点++a和a++

a=3
b=++a;
相当于先把a+1运算做了,再赋值给b
两行运算完毕a=4,b=4

a=3
b=a++;
相当于先把赋值运算作了,再给a+1
两行运算完毕a=4,b=3

程序举例

 public static void main(String[] args) {
        int a=3;
        int b=a++;
        System.out.println(a);//a=4
        System.out.println(b);//b=3
        int c=++a;//c=a+1=5;a=5
        System.out.println(a);//a=5
        System.out.println(c);//c=5
    }

运行结果

4
3
5
5


除了++运算,还有–运算,他们是一模一样的

幂运算
可以借助Math.XXX完成一些常见的数学运算,比如幂指数(即就是多少次方的运算)
注意这里的Math是大写。

Math.pow(doube_a,double_b)
//这里的pow就是表示Math.power,计算的是a^b,注意a,b至少有一个数需要是double

程序举例

public class Demo02 {

    public static void main(String[] args) {
        int a = 4;
        double b = 5;

        System.out.println(Math.pow(a,b));
    }
}

运行结果

1024.0

逻辑运算符&&, ||, !
条件运算符?:
扩展赋值运算符+=, -=, *=, /=

&&,||,!举例

public static void main(String[]args){
    boolean a = true;
    boolean b = false;
    System.out.println("a&&b="+(a&&b));//false
    System.out.println("a||b="+(a||b));//true
    System.out.println("!a="+(!a));//false
    System.out.println("!(a||b)="+!(a||b));//false
    System.out.println("!(a&&b)="+!(a&&b));//true

        }

结果输出:

a&&b=false
a||b=true
!a=false
!(a||b)=false
!(a&&b)=true

短路运算
这个意思是如果一个运算,计算到前面部分已经出了结果,后面的部分就直接不算了

public static void main(String[] args) {
        int c=5;
        boolean d= (c<4)&&(++c>4);//c<4得到false,后面的就不计算了
        System.out.println(c);//因为c<4得到false,++c没有被计算,所以c还是5
        System.out.println(d);//d为false
    }


5
false

位运算符位运算符 &, |, ^, ~, >>, <<, > >> (了解)

异或(A^B):相同为0,不同为1

<< 左移一位并且补充上来0,相当于原来的数乘2

相应的,右移一位,最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

System.out.println(2<<3); 就是2向左挪动3位,补上来的是0,运算结果是16

问题:位运算符的>>>什么意思?

>>> 是一个无符号右移运算符(Unsigned Right Shift Operator)。

当你使用普通的右移运算符 >> 对一个负数进行右移时,Java会保持其符号位(即最高位)不变,这被称为“算术右移”。这意味着负数在右移后可能仍然保持为负数。

相反,无符号右移运算符 >>> 会将所有位都向右移动,而不考虑符号位。它会在左边插入零,而不是复制符号位。因此,无论操作数是正数还是负数,>>> 都会在其左侧插入零。

int a = -4;     
// 在二进制中表示为: 11111111111111111111111111111100  

int b = a >> 1; 
// 算术右移: 11111111111111111111111111111110 (仍然是负数)  

int c = a >>> 1; 
// 无符号右移: 01111111111111111111111111111110 (变成了正数)  

计算结果:

System.out.println(b); // 输出 -2  

System.out.println(c); // 输出 2147483646

在这个例子中,-4 在进行算术右移后变成了 -2,因为它保持了符号位。但是,在进行无符号右移后,它变成了 2147483646,这是因为所有位都向右移动,并且在左侧插入了零。

+=和 -=符号

a+=b;//这句的意思就是a=a+b
类似的 a-=b//这句的意思就是a=a-b

举例

        
        int a=5;
        int b=3;
        int s=a+b;
        System.out.println("a+b="+s);
        a+=b;//a=a+b
        System.out.println("a="+a);//a=8
        System.out.println("b="+b);//b=3
        System.out.println("a="+a);//a=8

a+b=8
a=8
b=3
a=8

字符串连接符+
在System.out.println(xxx)时,只要出现了+符号,并且+前面是String类型,
也就是说String+组合,系统就会把+旁边的元素都转化成String类型输出

举例

public class Demo04 {
    public static void main(String[] args) {
        int a=10;
        int b=30;
        System.out.println("(a+b)="+(a+b));
        //a+b作为整体 先用int+int计算完毕了 再和字符(a+b)=拼接
        
        System.out.println("a+b="+a+b);
        //“a+b=”作为一个字符串,后面跟着两个字符串拼接符号+

        System.out.println(""+a+b);
        //首先遇见空字符串和拼接符号,且后面不是整体的int等类型,一项一项拼接,得到1030

        System.out.println(a+b+""+1);
        //首先遇到int加int,计算完毕后遇见了字符串拼接符号,拼接空得其本身,为String40,再拼接1,为401
    }

输出

(a+b)=40
a+b=1030
1030
401

三元运算符
x?y:z
如果x为真,则结果为y,否则结果为z
举例

 public static void main(String[] args) {
        int score=80;
        String m= (score>60) ? "及格" : "不及格";
        System.out.println(m);
    }
及格

java运算符优先级

简单说 单目 > 算术 > 位移 > 关系 > 逻辑 > 三目 > 赋值。

在这里插入图片描述
举例

    public static void main(String[] args) {
        int a=1427;//010110010011,2623₈ = 1427₁₀ = 593₁₆
        int b=6;//0110
        System.out.println(a>>+b);
        //这里面级别高的+b其实就是0+b,计算完毕结果还是6,然后给a右移6位,得到010110即就是22
        System.out.println(b);
        System.out.println(a);

    }

计算结果

22
6
1427


如果上面的例子没看懂,下面有详细解释:

public class test_jan{
public static void main(String[] args) {
        int a=1427;//010110010011,2623₈ = 1427₁₀ = 593₁₆
        int b=6;//0110
        System.out.println(a>>+b);
        //这里面级别高的+b,等于b=0+b,计算完毕结果还是6,然后给a右移6位,得到010110即就是22
        //注意:++b b++ 和 +b是完全不一样的
        System.out.println("b="+b); //b等于6
        System.out.println("+b="+(+b));//b=0+b;所以现在b是6
        System.out.println("++b="+(++b));//b=1+b;立刻赋值给b,所以现在b=7
        System.out.println("b++="+(b++));//b直接赋值b,然后再加一,所以这一行的值是7,但是b已经变成8了
        System.out.println("b="+b);
        System.out.println(a);

        }

}

运行结果

22
b=6
+b=6
++b=7
b++=7
b=8
1427
  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值