MacOs-JAVA开发4-运算符

MacOs-JAVA开发4-运算符

运算符的优先级

在这里插入图片描述

算术运算符

+、-、*、/ %

System.out.println(1+1);
		System.out.println(1-1);
		System.out.println(5*6);
		System.out.println(9/6);//整数参与运算,没有保留小数
		
		//取余数  取模
		System.out.println(9%6);//3
		
		System.out.println(9%3);//0

赋值运算符

=、+=、-=、*=、/=、%=

System.out.println(1+1);
		System.out.println(1-1);
		System.out.println(5*6);
		System.out.println(9/6);//整数参与运算,没有保留小数
		
		//取余数  取模
		System.out.println(9%6);//3
		
		System.out.println(9%3);//0
		
		//赋值操作  =赋值运算符
		int num=100;
		
		//其它的进阶的赋值运算符
		int a=3;
		
		//变量在参与运算的时候是变量里面装的常量进行的运算
		//右边先进行运算,运算完的结果赋值给左边
		a=a+3;
		
		System.out.println(a);//6
		
		int b=3;
		b+=3;//简化写法 b=b+3
		System.out.println(b);
		
		int c=6;
		c/=2;//c=c/2
		System.out.println(c);//3
		
		//  *=  %=
		
		int d=9;
		
		d%=2;//d=d%2 =>  9%2
		
		System.out.println(d);//1

+=符号的扩展

​ 下面的程序有问题吗?

    public static void main(String[] args){
        short s = 1;
        s+=1; // s = s+1;
        System.out.println(s);
    }

分析: s += 1 逻辑上看作是 s = s + 1 计算结果被提升为int类型,再向short类型赋值时发生错误,因为不能将取值范围大的类型赋值到取值范围小的类型。但是, s=s+1进行两次运算 , += 是一个运算符,只运算一次,并带有强制转换的特点,也就是说 s += 1 就是 s = (short)(s + 1) ,因此程序没有问题编译通过,运行结果是2.

一元运算符

++ 、 –

 public class Demo05 {
	
	public static void main(String[] args) {
		
		
		/*如果=赋值运算符和++单目运算符出现在两条语句中,
		 * ++k或者是k++,都是自增一,没有任何区别
		 */
		int k = 10;
		k++;
		System.out.println(k);//11
		
		int j = 10;
		++j;
		System.out.println(j);//11
		
		/*
		 * 如果=赋值运算符和++单目运算符出现在一条语句中,
		 */
		int i = 10;
		int i1 = i++;//++放在变量名后面,是先赋值再自增一,先把i的值赋值给i1,然后i再自增一
		System.out.println(i1);//10
		System.out.println(i);//11
		
		int n = 10;
		int n1 = ++n;//++放在变量名前面,是先自增一再赋值,n先自增一再赋值给n1
		System.out.println(n1);//11
		System.out.println(n);//11
		
		int m = 10;
		m = m++;//和JVM虚拟机的内存——栈中存储时指令先后顺序有关
		System.out.println(m);//10
		
		int m1 = 10;
		m1 = ++m1;//和JVM虚拟机的内存——栈中存储时指令先后顺序有关
		System.out.println(m1);//11
		
		/*
		 * 2.4)特殊情况——System.out.println()
		 */
		int l = 10;
		System.out.println(l++);//10 单目运算符++放在变量后面是先输出再自增一
		System.out.println(l);//11
		
		int l1 = 10;
		System.out.println(++l1);//11 单目运算符++放在变量前面是先自增一再输出
		
	}

}

关系运算符

关系运算符:(流程控制语句中常用)

  • == > < >= <= !=
  • 结果是布尔值 true/false

比较运算符

比较运算符的结果是一个布尔类型 true真 false假

//比较运算符
public class Demo08 {
	
	public static void main(String[] args) {
		
		int a=1;
		int b=1;
		
		//== 判断是否相等 相等返回true
		//变量里面装的东西进行比较
		System.out.println(a==b);//true
		System.out.println(1==1);//true
		
		//大于  >
		System.out.println(5>3);//true
		
		//大于等于 >=
		System.out.println(5>=5);//true
		
		// <  <=
		System.out.println(3<5);//true
		
		//!= 不等于
		System.out.println(3!=5);//true
		
	}

}

逻辑运算符

& && | || !

  • 逻辑运算符:(流程控制语句中常用)
  • &&:短路与——两边都是true,结果才为true;有一边是false,结果就为false
  • &:逻辑与——两边都是true,结果才为true;有一边是false,结果就为false
  • ||:短路或——两边都是false,结果才为false;有一边是true,结果就为true
  • | :逻辑或——两边都是false,结果才为false;有一边是true,结果就为true
  • ! :非/取反
  • ^ :异或——符号两边的布尔值不同输出是true,如果两边的布尔值相同输出结果是false
/*
位运算是直接对二进制补码进行运算。(了解)
结论:
			&:有0则0
			|:有1则1
			^:相同则0,不同则1
*/
public class Study {
	public static void main(String[] args) {
		//1. & |
		System.out.println(true&true);//true
		System.out.println(true&false);//false
		System.out.println(false&true);//false
		System.out.println(false&false);//false
		
		System.out.println(false|false);//false
		System.out.println(true|true);//true
		System.out.println(true|false);//true
		
		//2.&&和&的区别
		//笔试题:以下代码的输出结果?
		/*
		 * 逻辑与不智能,即使&前面的表达式为false,也会继续向下执行
		 */
		int a = 10;
		int b = 8;
		System.out.println((a<b)&(++a<b));//false (++a<b)执行了
		System.out.println(a);//11
		System.out.println(b);//8
		
		/*
		 * 短路与比较智能,一旦&&前面的表达式为false,结果就是false,就不会继续向下执行
		 */
		int a1 = 10;
		int b1 = 8;
		System.out.println((a1<b1)&&(++a1<b1));//false (++a1<b1)并没有执行
		System.out.println(a1);//10
		System.out.println(b1);//8
		
		//3.||和|的区别
		/*
		 * 短路或||比较智能,一旦||前面的表达式为true,结果就是true,就不会继续向下执行
		 * 逻辑或|不知能,即使|前面的表达式为true,也会继续向下执行
		 */
		
		//4.^ !
		System.out.println(!true);//false
		System.out.println(true^false);//true
		System.out.println(true^true);//false
		System.out.println(false^false);//false
		
		System.out.println(16^20);//4 10000 ^ 10100 = 00100->4
	}
}

三元运算符和字符串连接符

  • 1.字符串连接运算符:+
  • 当+两边都是数据值(1,20,-19)的时候,这个+是算术运算符,它的结果就是两个数据值的和

  • 当+两边有一边是字符串或者两边都是字符串的时候,这个+是字符串连接运算符,

  • 它的结果是字符串拼接后的结果,拼接后还是一个字符串

  • 注意:

  • 字符串连接从左往右依次连接,如果想优先计算某一部分需要加上小括号,因为小括号优先级最高!!!

  • 2.三元(目)运算符: ? :——重要!!!
  • 三元(目)表达式: 数据类型 变量名 = 布尔类型表达式?结果1:结果2;

  • 布尔类型表达式结果为true就执行:前边的结果1,否则就执行:后面的结果2

public class Study {
	public static void main(String[] args) {
		//1.+
		int a = 1;
		int b = 2;
		System.out.println(a+b);//3
		System.out.println(1+"123");//1123
		System.out.println(10+20+"10+20"+30);//3010+2030
		System.out.println("a+b="+a+b);//a+b=12
		System.out.println("a+b="+(a+b));//a+b=3
		
		//2.三元(目)表达式,和明天要学习的if else语句可以互换,在实际工作中经常用到的!!!
		int i = (a<b)?1:0;
		System.out.println(i);//1
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鹿鹿熊

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值