Java逻辑与运算符

涎涎原创约 2828 字大约 9 分钟...JavaJava

87-Java逻辑与运算符.mdopen in new window

注意

本博文仅供学术研究和交流参考,严禁将其用于商业用途。如因违规使用产生的任何法律问题,使用者需自行负责。

  • 运算符(操作符)

    • 是一种特殊的符号,用以表示数据的运算、赋值和比较

    • 运算符的种类:

      • 算术运算符: +、﹣、*、/、%、++、 --

      • 赋值运算符:=、+=、﹣=、*=、/=、%=

      • 比较运算符:>、<、>=、 <=、= =、!=、instanceof

      • 逻辑运算符:!、&&、||

      • 位运算符: &、|、^ 、 ~、>>、<<、>>>

      • 条件运算符: ?:条件运算符很独特,因为它是用三个操作数组成表达式的三元运算符。它可以替代某种类型的 if-else 语句

  • 算术运算符

符号含义备注
+加法
-减法
*乘法
/除法若是两个整数相除,只保留整数部分;
%取余被模数为正数结果都为正,被模数为负数结果都为负
++自增++变量名:变量在参与其他操作前先将自己加1变量名++:先用原来的值参与其他操作后,再将自己加1
--自减算法同++
+字符串连接当操作数中只要有一个是String类型,系统会自动将另一个操作数转换成字符串类型,然后进行连接
  • 算术运算符

    • 自增运算: ++, --

      • i++, 后++, 先将i的值作为整个表达的值, 然后将i增加1.

      • ++i, 先++, 先将i增加1, 然后将i的值作为整个表达的值.

如: 
int a = 1; int b=1;
b = a++;// 
1 a++表达式的值是1
2 执行a=a+1
3 执行赋值运算, 将表达式的值1赋值给b, 即b=1
  • 赋值运算符
符号含义备注
=x=y;把变量y的值赋给x
+=x+=y;x=x+y;
-=x-=y;x=x-y;
*=x*=y;x=x*y;
/=x/=y;x=x/y;
  • 关系运算符(比较运算符)
符号含义备注
==相等于注意不要误写成 “ = ”
!=不等于
<小于
>大于
<=小于等于(不大于)
>=大于等于(不小于)
  • 逻辑运算符(布尔运算符)

    • 逻辑运算符两端的操作数必须是布尔类型的值
符号含义备注
&&逻辑与相当于“且”,如果用&&连接表达式时,如果左面的表达式为false,则将不会计算其右边的表达式
||逻辑或相当于“或”,如果左面的表达式为true,则将不会计算其右边的表达式
!逻辑非
  • 位运算(只对byte、short、char、int、long有效)
    • 左移和右移运算相当于实现整数乘以或除以2的n次方
符号含义备注
&按位“与”只有参加运算的两位都为1,&运算的结果才为1,否则为0
|按位“或”只有参加运算的两位都为0,
^异或只有参加运算的两位不同,^运算的结果才为1,否则为0
<<左移a<<b,将a的二进制数据左移b位,右边移空的部分补0
>>右移a>>b,将a的二进制数据右移b位,如果最高位是0,则左边移空的部分补0,如果最高位是1,则左边移空的部分补1
>>>无符号右移不管最高位是0或1,左边移空部分都补0
  • 逻辑与或同按位与或是有一定区别的:

    • 相同点是:都能参与逻辑运算,按位与或完全可以代替逻辑与或;

    • 区别是:按位与或可以参与位运算,逻辑与或只能参与逻辑运算,逻辑与或可以“短路”,按位与或不能“短路”。

  • 短路运算

    • 作用运算符:逻辑与&&,逻辑或||

如(1):逻辑表达式:a>b && c>d 假设a>b 为false,c>d为true,那么整个表达式结果为false; 假设a>b 为false,c>d为false,那么整个表达式结果还为false; 可见,a>b的结果已经决定了整个表达式的结果,而后面的c>d并不影响表达式的结果,可以说后半部分被“短路”了。 如(2):逻辑表达式: a>b || c>d 假设a>b 为true,那么后半部分表达式将被“短路”

public class LogicDemo {
  public static void main(String[] args) {
    int i = 1;
    boolean b = i!=1 && (i++)==2;//短路与, i++不执行
    System.out.println(b);//false
    System.out.println(i);//1
    b = i!=1 & (i++)==2; //非短路运算, i++执行
    System.out.println(b);//false
    System.out.println(i);//2
    b = i==2 || (i++)==2;//短路或. i++不执行
    System.out.println(b);//true
    System.out.println(i);//2
    //自己演示非短路 "|"...
  }
}
  • 三元运算符

    • 所谓三元运算符,是对三个表达式进行的集中比较,表达式1的结果为true时,就为第二个表达式,如果为false时,就为第三个表达式。语法是:

    • 表达式1?表达式2:表达式3

    • 通过下面代码说明三元运算符。

public class HelloWorld13
{
	public static void main(String args[])
	{	
		//4 < 3表达式的结果为true和false的其中一个。
		boolean n = (4 < 3) ? true : false;
		//打印并显示结果
		System.out.println(n);
	}
}
  • 运算符的优先级

    • 按操作数多少划分

      • 一元操作符 > 二元操作符 > 三元操作符
    • 按运算类型划分

      • 算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符
    • 尽量多的使用括号

      • 括号优先级别最高

表达式通常由多个运算符组成。优先级的规则决定每个运算符在任何给定表达式中的计算顺序

顺序运算符
1.括号
2.一元运算符,如 -、++、- -和 !
3.算术运算符,如 *、/、%、+ 和 -
4.关系运算符,如 >、>=、<、<=、== 和 !=
5.逻辑运算符,如 &、^、|、&&、||
6.条件运算符和赋值运算符,如 ? :、=、*=、/=、+= 和 -=
package net.tencent.demo.test;

public class Test位运算符 {

	public static void main(String[] args) {

		/**
		 * 位运算符:&、|、^、~、>>、<<、>>>
		 */
		
		// &:逻辑与运算符(只有参加运算的两位都为1,&运算的结果才为1,否则为0)
		
		int a = 3;
		int b = 2;
		//1.把a和b转换成二进制;
		//a: 11
		//b: 10
		//a&b:10
		System.out.println(a & b);//2
		
		int c = 4;//100
		int d = 6;//110
		System.out.println(c & d);//4
	}
}
//|:逻辑或运算符(只有参加运算的两位都为0,|运算的结果才为0,否则为1)
	int e = 5;//101
	int f = 7;//111
				//111
	System.out.println(e|f);
/**
* ^异或运算符
* 只有参加运算的两位不同,^运算的结果才为1,否则为0
*/
int g = 4;//0100
int h = 8;//1000
		  //1100
System.out.println(g^h);//12
int p = 36;
int k = 2;
/**
* p >> 2:右移缩小,移多少位,就除以2的多少次幂
* 36:  0010 0100
* >>2:      1001
*/
/**
* k<<3:左移扩大,移多少位,就乘以2的多少次幂
* 2:   0000 0010
* <<3: 0001 0000
*/
System.out.println(p >> 2);//36/2的2次幂=36/4=9
System.out.println(k << 3);//2*2的3次幂=2*8=16
package net.tencent.demo.test;

public class Test算术运算符 {

	public static void main(String[] args) {

		//算术运算符: +、﹣、*、/、%、++、 --
		
		//单目运算符: ++ --
		
		int a = 10;
		
		a++;//让a自增 1
		
		System.out.println("a: " + a);//11
		
		a--;
		
		System.out.println("a: " + a);//10
		
		int b = a++;//自增有两种情况:一种是前自增(++a),先加1,后赋值,一种是后自增(a++),先赋值,后加1
		

		System.out.println("b: " + b);//10
		
		int c = ++a;
		System.out.println("c: "+c);//12
		
		int d = 100;
		int e = d--;
		
		System.out.println("e: " + e);//e:100
		
		System.out.println("d: " + d);//99
		
		int f = --d;
		System.out.println("d: " + d);//98
		System.out.println("f: " + f);//98
		
	}

}
int p = 100;
int h = 20;
System.out.println(p + h);//120
System.out.println(p - h);//80
System.out.println(p * h);//5
System.out.println(p / h);//2000
System.out.println(p % h);//0

int k = 12345;
//需求:如何求出k数字各个数位上数字的和?
//k%10000 = 2345
//k/10000 = 1
int k_w = k/10000;
int k_k = k % 10000 / 1000;
int k_b = k % 1000 / 100;
int k_s = k % 100 / 10;
int k_g = k % 10;

System.out.println(k_w + k_k + k_b + k_s + k_g);
package net.tencent.demo.test;

public class Test赋值运算符 {

	public static void main(String[] args) {
     
		//赋值运算符:=、+=、﹣=、*=、/=、%=
		int a = 2;
		int b = 1;
		b += a;//给b重新赋值 b = b+a;
		int c = 2;
		c -= a;//c = c-a
		int d = 3;
		d *= a;//d = d*a
		int e = 4;
		e /= a;//e = e/a
		int f = 10;
		f %= a;//f = f%a
		
		/**
		 * 注意:以后这种写法比较多: b += a; 这种写法比较少 b = b + a;
		 * 原因:计算机执行第一种写法速度快;
		 */
	}
}
package net.tencent.demo.test;

public class Test比较运算符 {

	public static void main(String[] args) {

		//比较运算符:>、<、>=、 <=、= =、!=、instanceof
		
		//为了控制程序的运行,在代码中经常使用比较运算符

		int rows = 2;
		
		if(rows == 2) {
			System.out.println("支付成功");
		}else {
			System.out.println("支付失败");
		}
	}
}

instanceof运算符

package net.tencent.demo.test;

/**
 * 动物类
* <p>Title: Animal</p>  
* <p>Description: </p>  
* @author xianxian 
* @date 2019年7月2日
 */
public class Animal {

	//这是一个构造方法
	public Animal()
	{
		
	}
	
	private int age;
	private String name;
	private double weight;
	private String color;
	//....
	public void walk()
	{
		System.out.println(name + "is walking");
	}
	
	public void sleep()
	{
		System.out.println(name + "is sleeping");
	}
	
	public void eat()
	{
		System.out.println(name + "is eating");
	}
}
package net.tencent.demo.test;

public class Test比较运算符 {

	public static void main(String[] args) {
		//instanceof:判断某个对象是否是某个类的实例
		//new Test比较运算符();//当前类实例化
		//实例化一个对象
		Animal cat = new Animal();//Animal()这是一个构造方法,
		//只要是new的对象都在堆区,只要是声明一个变量就一定在栈区
		System.out.println(cat instanceof Animal);//cat这个变量是Animal类型的一个对象吗?---> true
		//System.out.println(cat instanceof Student);//因为不是Student类型的对象,所以代码根本不给 过
	}
}

逻辑运算符

package net.tencent.demo.test;

public class Test逻辑运算符 {

	public static void main(String[] args) {

		// ! && ||
		// !:该操作符后面跟的是boolean类型的数据,对该数据取反
		boolean result = false;
		int a = 1;
		if(!result)
		{
			System.out.println("1");
		}else {
			System.out.println("2");
		}
		
		//&&:并且的意思 ,只有两个表达式都为真,才返回真
		
		int money = 200000;
		boolean haveHouse = true;
		if(haveHouse && money > 100000) {
			System.out.println("同意结婚");
		}else {
			System.out.println("不同意结婚");
		}
		
	
		//||:或者的意思,两个表达式有一个为真那么就返回真
		//这个女孩子特别贤惠:有房子可以结婚,有一点钱也可以结婚
		if(haveHouse || (money > 10000)) {
			System.out.println("同意结婚");
		}else {
			System.out.println("不同意结婚");
		}
		
		
		int y = 100;
		int x = 200;
		
		if((y++ > 1) || (x++ > 200)) {
			System.out.println("大于200");
		}else {
			System.out.println("没有大于200");
		}
		
		System.out.println("x: " + x);
		/*
		 * && || 都是短路运算符
		 * 相当于“且”,如果用&&连接表达式时,如果左面的表达式为false,则将不会计算其右边的表达式
		 * 相当于“或”,如果左面的表达式为true,则将不会计算其右边的表达式
		 */
	}

}

三元运算符

package net.tencent.demo.test;

public class Test三元运算符 {

	public static void main(String[] args) {

		//需求:服务器代码接收性别是男,希望转换成数字1,接收性别是女,希望转换成数字0
		
		String sex = "男";
		
		int s = 0;//把s变量初始化为0,不是最终结果
		
		if(sex.equals("男")) {
			s = 1;
		}else {
			s = 0;
		}
		System.out.println("性别: " + s);
		
		//那个需求有没有更好的实现方式呢?
		/**
		 * 三元表达式:
		 * 1、语法:表达式一?表达式一:表达式三
		 * 2、替换if--else语句
		 * 3、常用来做赋值操作
		 */
		int result = sex.equals("男") ? 1 : 0;
		System.out.println("性别: " + result);
	}

}

扩展知识

HTTP状态码-百度百科open in new window

HTTP状态码-菜鸟教程open in new window


分割线


相关信息

以上就是我关于 Java逻辑与运算符 知识点的整理与总结的全部内容,另附源码open in new window

上次编辑于:
贡献者: 涎涎
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.4