Java instance of 运算符和运算符优先级

instanceof 运算符

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)。

instanceof运算符使用格式如下:

( Object reference variable ) instanceof  (class/interface type)

如果运算符左侧变量所指的对象,是操作符右侧类或接口(class/interface)的一个对象,那么结果为真。

下面是一个例子:

String name = "James";
boolean result = name instanceof String; // 由于 name 是 String 类型,所以返回真

如果被比较的对象兼容于右侧类型,该运算符仍然返回true。

 

在判断一个实例引用的类型时,使用的是实际类型,而不是声明的类型。在下面的代码中,

Vehicle v2 = new Car();    // v2 是 Car 类型

v2 是 Car 类型,而不是 Vehicle 类型。

class Vehicle {}

public class Car extends Vehicle {
    public static void main(String args[]){
        Car c1 = new Car();

        Vehicle v2 = new Car();    // v2 是 Car 类型
        Vehicle v3 = new Vehicle();

        //Car 是 Vehicle类型, Vehicle 不是 Car 类型
        boolean result1 =  c1 instanceof Vehicle;    // true
        boolean result2 =  v2 instanceof Car;        // true
        boolean result3 =  v2 instanceof Vehicle;    // true
        boolean result4 =  v3 instanceof Car;          // false

        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
        System.out.println(result4);
   }
}

 

Java运算符优先级

当多个运算符出现在一个表达式中,谁先谁后呢?这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。

1.下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。

类别操作符关联性
后缀() [] . (点操作符)左到右
一元expr++ expr--从左到右
一元++expr --expr + - ~ !从右到左
乘性 * /%左到右
加性 + -左到右
移位 >> >>>  << 左到右
关系 > >= < <= 左到右
相等 ==  !=左到右
按位与左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或| |左到右
条件?:从右到左
赋值= + = - = * = / =%= >> = << =&= ^ = | =从右到左
逗号左到右
  • 所有的数学运算符都认为是从左到右运算的,Java 语言中大部分运算符也是从左到右结合的
  • 单目运算符、赋值运算符和三目运算符是从右向左结合的,也就是从右向左运算。 

 

2.C + = A 与 C = C + A 是有区别的一句话总结: += 运算符既可以实现运算,又不会更改 s 的数据类型;而后者,C 和 A 必须是同一类型,否则无法直接运算

public class Student{
    public static void main(String[] args){
        short s = 10;

        //s = s + 3; 编译不通过
        s = (short)(s + 1); //不建议如此实现
        s += 1;    //既可以实现运算,又不会更改s的数据类型
        System.out.println("输出变量");
    }
}

另外, -= , *= , /= 也应同理。

 

3.整数运算:

  •  1、如果两个操作数有一个为 long,则结果也为 long。
  •  2、没有 long 时,结果为 int。即使操作数全为 short、byte,结果也是 int。
public class Main {
    public static void main(String[] args) {
        byte a = 1;
        int b = 2;
        long b2 = 3;
        byte c = a + b;  // 报错
        int c2 = b2 + b;  // 报错
    }
}

4.关联性

Java 中关联性顺序不同指左右结合的顺序不同,对于三目运算符,关联性是从右向左的。例如:

a ? b: c ? d : e

根据关联性结果为 a ? b : (c ? d : e), 即将右侧运算作为一个整体来进行运算,先进行 a 条件的判断。

int b = 2;
int d = (b<1) ? ++b : (b>1) ? --b : 2;
System.out.println(d) ;//结果为1, b的值为1

int b = 2;
int d = (b>1) ? ++b : (b>1) ? --b : 2;
System.out.println(d) ;//结果为3, b的值为3

参考:

https://www.runoob.com/java/java-operators.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hnu哈哈

请接受直女的么么哒????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值