java 二元运算符,二元运算符 - twoapes的个人空间 - OSCHINA - 中文开源技术交流社区...

二元运算符

逻辑运算符

AND:&&

OR:||

NOT:!

//&&和||也称短路运算符

位运算符

与:&

或:|

非:~

异或:^

左移:<<

右移:>>

无符号右移:>>>

//除了~是一元运算符,其他的都是二元运算符

//位模式左移和右移,需要建立位模式进行掩码,>>>运算符会用0填充高位,>>运算符会用符号位填充高位,不存在<<

import java.util.Random;

public class Note {

public static void main(String[] args) {

int a = 3;

int b = 4;

String x = "3";

String y = "4";

//位运算符只能操作于数值

System.out.println(a & b);

System.out.println(a | b);

System.out.println(~b);

System.out.println(~a);

System.out.println(a ^ b);

//如果操作字符串或对象就会报错

//System.out.println(x^y);

//System.out.println(x|y);

//逻辑运算符只能操作于关系判断

System.out.println(a == 3 && b == 4);

System.out.println(a == 3 || b == 4);

System.out.println(!false);

System.out.println(!true);

//java保留了&与|操作于判断,但一般不会用于关系判断,因为效率很低,所有的判断都需要走一遍

System.out.println(a == 3 & b == 4);

System.out.println(a == 3 | b == 4);

//短路运算符的作用

System.out.println(a == 4 && b == 3);//如果a==4不成立那么直接返回true,&&后续判断皆不再执行

System.out.println(a == 3 || b == 4);//如果a=3成立,那么直接返回true,&&后续判断皆不再执行

/*需要导入包:import java.util.Random;*/

//与 (&&) 或(||) 非(!)

Random random = new Random(47);

int i = random.nextInt(100);

int j = random.nextInt(100);

System.out.println("i:" + i);

System.out.println("j:" + j);

System.out.println("i>j is " + (i > j));

System.out.println("i

System.out.println("i>=j is " + (i >= j));

System.out.println("i<=j is " + (i <= j));

System.out.println("i==j is " + (i == j));

System.out.println("i!=j is " + (i != j));

//以下是错误的操作

//System.out.println("i$$j is " + (i && j));

//System.out.println("i||j is " + (i || j));

//System.out.println("!i is " + (!i);

System.out.println("(i<10)&&(j<10) is " + ((i < 10) && (j < 10)));

System.out.println("(i<10)||(j<10) is " + ((i < 10) || (j < 10)));

//综上所述:操作于数值使用位运算符,操作关系运算使用逻辑运算符

}

}

boolean和关系运算符

//小于(),大于等于(>=),小于等于(<=),等于等于(==),不等于(!=)

//关系操作符生成的是一个boolean(布尔)结果

//可以用于操作数的值之间的关系,如果是真的就返回true(真),否则返回false(假)

测试对象的等价性

/**

* 关系操作符==和!=也适用于对象

*/

public class Note {

public static void main(String[] args) {

//内容为47

Integer n1 = new Integer(47);

//内容为47

Integer n2 = new Integer(47);

//==,!= 即会判断内容,还会判断对象的引用,如果对象的引用不一致则返回false

System.out.println(n1 == n2);

System.out.println(n1 != n2);

//n1,n2对象对应的Integer类重写了equals()方法,所以只会比较内容是否一致,不会比较对象的引用是否一致

//重写Object的equals 方法 内容为: value == ((Integer)obj).intValue(); //比较内容

System.out.println(n1.equals(n2));

Value v1 = new Value();

Value v2 = new Value();

v1.i = v2.i = 100;

//v1,v2对象没有重写equals()方法,所以会比较对象的引用

//继承Object的equals 方法 内容为: this == obj //比较引用

System.out.println(v1.equals(v2));

//equals(参数) 方法默认对象引用的比较

//即是否为同一个对象

}

static class Value {

int i;

}

}

类型比较运算符

instanceof

public class Note {

public static void main(String[] args) {

Object a = Long.MAX_VALUE;

//输出为false

if (a instanceof Integer) {

a = (Integer) a * 100;

System.out.println(a);

} else {

System.out.println(false);

}

//输出为true

if (a instanceof Long) {

a = (Long) a * 100;

System.out.println(true);

} else {

System.out.println(false);

}

/*

当前代码不难看出,开发过程中会使用到父类,那么对于父类的子类可能有多个,那么赋值的表现形式可以一定程度缩小检查范围,所以我们可以使用instanceof关键字

当前案例中,结果的表现形式来看,已经超过Integer的最大值,应当为Long类型

*/

//a = (Integer) a * 100; //如果进行错误的强制转换将导致不必要的错误,因此开发中会经常使用到instanceof关键字

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值