由浅到深认识Java语言(5):运算符

本文介绍了作者分享的SpringBoot项目初始化模板,涵盖了Java中的算术、关系、逻辑、位运算符以及三元运算,同时提供键盘输入处理示例,有助于初学者快速上手并理解Java运算符的优先级和应用。
摘要由CSDN通过智能技术生成

该文章Github地址:https://github.com/AntonyCheng/java-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】& CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识Java语言(4):数据类型

11.Java中的运算符

算术运算符

符号意义
+加法
-减法
*乘法
/取整
%取余
++累加
--类减
  • 取整/取余

    注意 double 类型和 float 类型取整取余的计算;

    package top.sharehome.Bag;
    
    public class Demo {
    	public static void main(String[] args) {
    		double a = 12.99;
    		float b = 12.99f;
    		double DF1 = b / 2;
    		double DF2 = b % 2;
    		float FF1 = b / 2;
    		float FF2 = b % 2;
    		double DD1 = a / 2;
    		double DD2 = a % 2;
    		float FD1 = (float) a / 2; // 这里要强转
    		float FD2 = (float) a % 2; // 这里要强转
    		double DI = 12 / 5;
    		float FI = 12 / 5;
    		System.out.println("DtoF1=" + DF1);
    		System.out.println("DtoF2=" + DF2);
    		System.out.println("FtoF1=" + FF1);
    		System.out.println("FtoF2=" + FF2);
    		System.out.println("DtoD1=" + DD1);
    		System.out.println("DtoD2=" + DD2);
    		System.out.println("FtoD1=" + FD1);
    		System.out.println("FtoD2=" + FD2);
    		System.out.println("DtoI=" + DI);
    		System.out.println("FtoI=" + FI);
    	}
    }
    
    

    打印效果如下

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    如果想要 double 的结果,就需要在参与运算的一方变成 double 即可:

    double a = (double)12/5;
    

    这样整个结果就是一个 double

  • 加法

    特殊用法:字符串的连接符;

    注意:

    • 当基本数据类型和字符串之间使用 + 作运算符,此时该 + 是字符串连接符,当运算中含有整数时,+ 后面不能接字符,否则是做ASCII值的加法运算;
    • 运算时还要注意计算的顺序,要想清楚是先计算还是先转码:
  • ++ / -- 自增/自减

    首先得牢记的是,赋值也是一种运算;

    package top.sharehome.Bag;
    
    public class Demo {
    	public static void main(String[] args) {
    		int i = 10;
    		int b = i++;    //先赋值10,再加得i=11
    		int c = ++i;    //先加得i=12,再赋值12
    		System.out.println(b);
    		System.out.println(c);
    	}
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    记忆:看谁离等号近,就先运算谁;

    建议在表达式中不要使用++或者–,这样的代码会让人困惑,而且可能会带来烦人的bug,主要原因参考《Java核心技术 卷Ⅰ》

赋值运算符

  • = 赋值运算符

    int a = 10;
    
  • += 加等运算符

    int a = 10;
    a += 10; //等同于 a = a + 10 == 20
    
  • += 减等运算符

    int a = 10;
    a -= 10; //等同于 a = a - 10 == 0
    
  • 笔试题:

    //判断下列式子是否会报错?
    short a = 10;
    a = a + 1; 	//会报错
    a += 1;		//不会报错
    a++;		//不会报错
    

关系运算符

关系运算会产生 boolean 的结果: true false

符号意义
>大于
<小于
==等于
>=大于等于
<=小于等于
!=不等于

逻辑运算符

关系运算会产生 boolean 的结果: true false ;

逻辑运算是可以让多个关系运算组合在一起,生成相应的结果,因此参与逻辑运算的双方都应该是一个布尔值的表达式,即运算结果是一个 boolean ;

符号意义
&逻辑与
**``**
^逻辑异或
!逻辑非
&&短路与
**`
  • 逻辑与 &

    T & T = T

    T & F = F

    F & F = F

  • 逻辑或 |

    T | F = T

    T | T = T

    F | F = F

  • 逻辑异或 ^

    T ^ F = T

    T ^ T = F

    F ^ F = F

  • 逻辑非 !

    !T = F

    !F = T

  • 短路与 &&

    短路与和逻辑与的运算规则是相同的,也就是两边都是 true 才是 true ,只要有一边是 false ,结果必然是 false

    但是短路与可以大大提高程序的效率,因为只要左边是 false ,右边就不会再运算,因为结果必然是 false

  • 短路或 ||

    短路或和逻辑或的运算规则是相同的,也就是两边都是 false 才是 false ,只要有一边是 true ,结果必然是 true

    但是短路与可以大大提高程序的效率,因为只要左边是 true ,右边就不会再运算,因为结果必然是 true

位运算符

当符号两边是整数时,则是位运算符;当符号两边是 boolean ,则是逻辑运算符;

  • & 按位与

    有 0 得 0,其他得 1;

    6 & 2
      0000 0110
    & 0000 0010
    -------------
      0000 0010  == 2
    
  • | 按位或

    有 1 得 1,其他得 0;

    6 | 2
      0000 0110
    | 0000 0010
    -------------
      0000 0110  == 6
    
  • ^ 按位异或

    1 ^ 1 == 0;

    0 ^ 0 == 0;

    1 ^ 0 == 1;

    6 ^ 2
      0000 0110
    ^ 0000 0010
    -------------
      0000 0100 == 4
    
  • ~ 按位取反

    按位取反会改变符号位:

    ~0 == 1;

    ~1 == 0;

    ~6
      0000 0110
    -------------
      1111 1001
    
  • >> 有符号右移

    实现二进制的右移;

    6 >> 2
    0000 0110 >> 2 == 0000 0001 == 1 //正数补 0
    -7 >> 2
    1111 1001 >> 2 == 1111 1110 == -2 //负数补 1
    
  • << 有符号左移

    实现二进制的左移;

    6 << 2
    0000 0110 << 2 == 0001 1000 == 24
    
  • >>> 无符号右移

    正负号均补 0;

    6 >>> 2
    0000 0110 >>> 2 == 0001 1000 == 24
    -7 >>> 2
    1111 1001 >>> 2 == 0011 1110 == 62
    
  • 面试题:

    如何最快的求得 8 × 2 3 8×2^3 8×23 ?

    8 << 3
    0000 1000 << 3 == 0100 0000 == 64
    

三元运算符

格式如下:

int a = 10;
int b = 20;
int m = a>b? a:b;

问号前面是条件表达式,条件为 true 则赋值 a ,否则赋值 b

示例如下:

用三元运算符比较三个数得大小:

package top.sharehome.Bag;

import java.util.Scanner;  //从键盘获取,下一节内容

public class Demo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);  //键盘获取,下一节内容
		int a,b,c;	
		a = sc.nextInt();					  //键盘获取,下一节内容
		b = sc.nextInt();					  //键盘获取,下一节内容
		c = sc.nextInt();					  //键盘获取,下一节内容
		System.out.println(a>b? (a>c? a+"最大":c+"最大"):(b>c?b+"最大":c+"最大"));
		sc.close();
	}
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

运算符优先级

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

提示说明:

(1)表达式不要太复杂

(2)先算的使用()

大体的排序:算术 ⇒ 位 ⇒ 比较 ⇒ 逻辑 ⇒ 三元 ⇒ 赋值

12.从键盘获取输入

获取整数的固定格式:

//导入类
import java.util.Scanner;
class demo{
    public static void main(String[] args){
        //创建一个键盘输入对象
        Scanner sc = new Scanner(System.in);
        //调用方法获取
        Scanner sc = new Scanner(System.in);
		byte b = sc.nextByte();
		char c = sc.next().charAt(0);
		short s = sc.nextShort();
		int i = sc.nextInt();
		long l = sc.nextLong();
		float f = sc.nextFloat();
		double d = sc.nextDouble();
		String s = sc.next();
        //关闭键盘输入
        sc.close();
    }
}

下一章:由浅到深认识Java语言(6):控制流程语句

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值