操作符

在最底层,Java中的数据是通过使用操作符来操作的。

赋值运算符
  • =

在Java中,基本类型的赋值会改变被赋值变量的值,但是对对象的赋值改变的是引用

class Tank {
    int level;
}

public class Assignment {
    public static void main(String[] args) {
        Tank t1 = new Tank();
        Tank t2 = new Tank();
        t1.level = 9;
        t2.level = 47;
        t1.level = t2.level;//赋值后t1.level,t2.level都为47

        t1 = t2;
        t2.level = 27;//此时t1.level,t2.level都为27,因为上一行中t1=t2让t1、t2都指向了同一个对象
    }
}    

在方法传参数上,传递的对象也是一个引用,而不是形参。

算术操作符
  • +
  • -
  • *
  • /
  • %
  • +=
  • -=
  • *=
  • /=
  • %=
一元加减操作符
  • +
  • -
x=-a;
x=+a;
自动递增和递减
  • 前缀递增、后缀递增(a++,++a)
  • 前缀递减、后缀递减(a–,–a)
关系操作符
  • >
  • <
  • >=
  • <=
  • ==
  • !=
String a = new String("abc");
String b = new String("abc");
a == b;//false
a.equals(b);//true
//==比较的是引用,因为两个字符串是不同的对象,所以结果是false,equals比较的才是值。
class Value {
 int i;
}
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
v1.equals(v2);//false
//此处为什么是false呢,因为equals()的默认行为是比较引用,所以要覆盖equals()方法,另外如果要深入研究hashCode()方法。
逻辑操作符
  • &&
  • ||
  • !
短路原则
  • 对于expression1&&expression2&&expression3,如果左边的运算得到的结果为false,总的结果一定为false,所以下一步运算便不再进行下去
  • 同理expression1||expression2||expression3,如果左边的运算得到的结果为true,总的结果一定为true,发生短路
直接常量
int a = 0x2f;
int b = 0177;
long c = 100L;
float d = 100F;
double e = 100D;
//大小写均可
指数计数法
 float expFloat = 1.39-43f;
 //expFloat的值为1.39*10的-43,e表示的并不是自然对数的基数
按位操作符
  • &
  • |
  • ~
  • ^
移位操作符
  • << 在低位补0
  • >> 在高位按符号补,正数补0,负数补1
  • >>> 高位补0
  • <<=
  • >>=
  • >>>=
public class URShift {
    public static void main (String[] args) {
        int i = -1;
        print(Integer.toBinaryString(i));
        i>>>= 10;
        print(Integer.toBinaryString(i));
        //结果是:
        //11111111111111111111111111111111 32位
        //1111111111111111111111 22位 
        long l = -1;
        print(Long.toBinaryString(l));
        l>>>= 10;
        print(Long.toBinaryString(l));
        //结果是:
        //1111111111111111111111111111111111111111111111111111111111111111  64位
        //11111111111111111111111111111111 1111111111111111111111 54位 
        short s = -1;
        print(Integer.toBinaryString(s));
        s>>>= 10;
        print(Integer.toBinaryString(s));
        //结果是:
        //11111111111111111111111111111111 32位
        //11111111111111111111111111111111 32位
        byte b = -1;
        print(Integer.toBinaryString(b));
        b>>>= 10;
        print(Integer.toBinaryString(b));
        //结果是:
        //11111111111111111111111111111111 32位
        //11111111111111111111111111111111 32位
        b = -1;
        print(Integer.toBinaryString(b));
        print(Integer.toBinaryString(b>>>10));
        //结果是:
        //11111111111111111111111111111111 32位
        //1111111111111111111111 22位

如果对char、byte、short类型的数值进行移位处理,那么在移位进行之前,它们会被自动转换为int类型,并且结果也是int类型。上述的结果倒数二三个例子的结果赋值回byte,short变量中,所以结果被截断了,再打印出来的时候又转成int类型输出,所以结束依然是32位,而最后一个例子运算到的结果得到22位的结果就被直接打印出来了。所以结果没有错。

三元操作符
  • ? :
字符串操作符
  • +
  • +=
类型转换操作符
  • 窄化转换 (显式转换)
  • 扩展转换 (隐式转换)
提升

byte或者short类型的数执行算术运算或按位运算后,值会自动转换成int。如果要把结果赋值给较小的类型,就必须使用类型转换。


以上皆个人学习的总结,如有不对之处,欢迎指出。邮箱:527219336@qq.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值