03 操作符

本文详细解析了Java中的各类运算符,包括赋值、类型转换、位运算等,并通过实例展示了它们的应用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、优先级

                       

2、赋值

1)是传值还是传引用?

        对于基本类型是值传递;
        对于引用类型是传递的是引用:
        实例1:
public void test(){
       Tank t1 = new Tank();
       t1.level=1;
       Tank t2 = new Tank();
       t2.level=2;
       t1=t2;
       t1.level=1;
       System.out.println(t1.level)   //1
       System.out.println(t2.level)   //1
}
             说明:给将t2赋给t1,完成了引用的复制;  t1和t2是不同的引用,但是指向同一个对象;

        实例2:

<span style="font-family: monospace; white-space: pre; background-color: rgb(240, 240, 240);">public void f(Tank t){      </span>
       t.level = 3;
}

public void test(){
       Tank t = new Tank();
        t.level=1;
        System.out.println(t.level)   //3
}

2)里面涉及类型转换

要注意的是     short s = 1;   
                          s+=1;     //true
                          s = s+1 ; //false


3、自动递增和递减

    笔试题比较常考

4、关系操作符

      ==与equals
      若是基本类型的比较用==;若是对象比较用equals,有时候需要重写equals方法自定义比较规则。

5、逻辑操作符

     笔试 短路常考

6、直接常量

     int i1 = 0x2f;         //十六进制
     int i2 = 0x2F;
     int i3 = 0177        //八进制
     
     char c = 0xffff;      //max  char       2的16-1
 
     byte b = 0x7f;      //max  byte        2的7-1
     
     short s = 0x7fff;   //max short       2的15-1

      float f1 = 1f;
      float f2= 1F;

      double d1 = 1d;
      double d2 = 1D;

      long l1 = 200l;
      long l2 = 200L;
     
      
   指数计数法:  
                         

记住一个重要的方法:Integer.toBinaryString(int i);     获取二进制表示的字符串 ,
        这里的i可以是char short  byte  int  long ,这里为了方便将类型写成了int

6、按位操作符

     & (与)   、     | (或)   、  ~  (非) 、   ^(异或)
      1)两个数进行位操作的的;
      2)两个表达式进行逻辑判断,不会短路;
 
   笔试常考考点。

 7、位移

     >>(左移):将操作符左边的操作数向左移动(在低位补0)
     <<(”有符号“右移):将操作符左边的操作数向右移动(符号为正,高位插入0;符号为负,高位插入1)
     >>>(无符号右移):将操作符左边的操作数向右移动(无论符号正负,高位插入0)
     

案例:

1、左移(算术移位)

3<< 2 是如何在计算机里是实现的?

首先将3转换为2进制,

00000000

00000000

00000000

00000011

的二进制

00000000

00000000

00000000

000011

左移2位,砍掉高位

0000 0000

0000 0000

0000 0000

0000 1100

低位补0








结果是12,所以3<<2 =12;

推论

3<<2=12;  3<<1=6 ;  3<<3=24;

3*4=12 ;  3*2=6;    3*8=24;

3*22=12;   3*21=6    3*23 =24;

结论:左移就相当于乘以2的位移个数次幂.

2、右移

6>>2

00000000

00000000

00000000

00000110

6的二进制

000000

00000000

00000000

00000001

右移10被砍掉

00000000

00000000

00000000

00000001

高位补0








结果是1,所以6>>2 =1;

结论:一个数往左移越移越大,往右边移越来越小.

右移规律

6>>2=1  ;6>>1=3 ;

6/4=1   ; 6/2=3 ;

右移两位就是除以 22次方,右移一位就是除以 2的一次方。

结论右移就相当于乘以2的位移个数次幂.

总结>> 是除以2的移动位数次幂

     << 是乘以2的移动位数次幂

用处:最快的运算是位运算。

练习:最有效率的方式算出2乘以8等于几?

3、无符号右移(逻辑移位)

通过演示发现右移时高位就空了出来,>> 右移时高位补什么要按照原有数据的最高位来决定。

1111-1111 1111-1111 1111-1111 1111-1010    -6>>2

1111-1111 1111-1111 1111-1111 1111-0010   

 最高位补什么要看原有最高位是什么

那么使用>> 后原来是最高位的那么空出来的最高位还是的,是0的还是0

如果使用>>> 无论最高位是0还是空余最高位都拿,这就是无符号右移。

1111-1111 1111-1111 1111-1111 1111-1010    -6>>>2

001111-1111 1111-1111 1111-1111 1111-10   

结果是;1073741822


8、三元操作符


9、字符串操作符

+  和 +=
字符串与任何基本类型+:都发生类型转换,转换为字符串

10、类型转换操作符

强制类型转换截尾与舍入

尾:将29.8转换为int,结果是29

舍入:java.lang.Math的round()方法  如:

           Math.round(29.8) ;   //30         

           Math.round(29.2);    //29

自动转换

1)对基本数据类型进行算术运算或按位运算,只要类型比int小(char、byte、short),在运算之间自动转换为int
2)在运算中,小范围向大范围转换,精度低向精度高转换:int --   long -- float -- double
说明:进行强制转换时,可能溢出丢失信息
总结:自动类型转换:(byte,short,char)----  int  ---- long ----- float ----- double
            对于byte、short、char三种类型而言,是同一级别的,不能相互自动转换,需要进行强制转换。 
     
     
     
     




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值