带你盘点Java的五种运算符

目录
  • 1、算术运算符
  • 2、赋值运算符
  • 3、比较运算符
  • 4、逻辑运算符
  • 5、位运算符
  • 总结

1、算术运算符

算术运算符的符号通常为:加(+)、减(-)、乘(*)、除(/)、取余(%)、自增(++)、自减(--)。

使用int类型的变量和int类型的变量做除法,得到的结果还是int类型;

使用double类型的常量和 int类型的常量做除法,会得到double类型的结果;在使用强制类型double转换可以得到double类型

System.out.println(7 / 2);//3.0
System.out.println((double)(7 / 2));  // 3.0
System.out.println((double)7 / 2);    // 3.5

既然存在除法,那么对于除0这个特殊的数,Java的程序是怎么处理的呢,是否都是异常的报错呢?我们可以执行试一下

// 产生异常:java.lang.ArithmeticException: / by zero
int i = 123 / 0;
System.out.println(i);
// 产生异常:java.lang.ArithmeticException: / by zero
int j = 0 / 0;
System.out.println(j);
double k = 123.45 / 2;
System.out.println(k); // 61.725
double x = 123.45 / 0;
System.out.println(x); // Infinity(正无穷大)
double y = -123.45 / 0;
System.out.println(y); // -Infinity(负无穷大)
double m = 0.0 / 0;
System.out.println(m); // NaN(Not a number 不是一个数)
double n = -0.0 / 0;
System.out.println(n); // NaN(Not a number 不是一个数)
float x = 123.45F / 0;
System.out.println(x); // Infinity(正无穷大)
float y = -123.45F / 0;
System.out.println(y); // -Infinity(负无穷大)
float m = 0.0F / 0;
System.out.println(m); // NaN(Not a number 不是一个数)
float n = -0.0F / 0;
System.out.println(n); // NaN(Not a number 不是一个数)
//产生异常:java.lang.ArithmeticException: / by zero
int x = 11 % 0;
System.out.println(x);
double y = 11.0 % 0;
System.out.println(y); // NaN

自增运算符

单独使用自增运算符:不论++放在需要自增的变量的前面还是后面,都会在操作后让变量的值自增1

非单独使用自增运算符:int j = i++; // i: 3 j: 2(一上来先把i的值赋值给j,然后i自己做自增(先赋值再自增));int j = ++i; // i: 3 j: 3(上来先i自己做自增,然后把i的值(自增后的值)赋值给j(先自增再赋值));

这里附加一个练习题:

int i = 2;
int j = 3;
j = i++ + ++i+i*6;

最后j是多少?(结果是:30)

2、赋值运算符

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

这个没什么说的只是进行赋值的操作,只是要注意对于非默认数据类型的数据,使用带有算术运算符的赋值运算符时,会自动进行强制类型转换,例如:

byte j = 5;j += 6; // 下句等价于上句 j = (byte) (j + 6);

3、比较运算符

比较运算符:==、!=、>、<、>=、<=;Java中使用 == 表示相等(内容相等)

4、逻辑运算符

逻辑运算符:&|!^&&||

&:逻辑与,有一个是false得到的结果就是false

|:逻辑或,有一个是true得到的结果就是true

!:逻辑非,颠倒黑白

^:逻辑异或,类似吸铁石(真假为真,真真为假,假假为假)

&&:逻辑与,如果参与运算的第一个变量或表达式为false,得到的结果就是false,其他的变量或表达式就不去执行;如果多个逻辑与参与运算,以此类推;

||:逻辑或,如果参与运算的第一个变量或表达式为true,得到的结果就是true,其他的变量或表达式就不去执行;如果多个逻辑与参与运算,以此类推;

&和&&区别:&&具有短路的操作,比如第一个表达式是false时,是不会执行第二个表达式(if(s!=null&&s.equal(""))),如果s是null的话使用&就会报错;&可以可以用在位运算符中。

练习题:

int i = 2;
int j = 3;
System.out.println((++i == 2) && (j++ == 3));

问:最终i 和 j 的值是多少?(i为3,j为3)

int i = 2;
int j = 3;
System.out.println((++i == 2) & (j++ == 3));

问:最终i 和 j 的值是多少?(i为3,j为4)

5、位运算符

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

规则:(在二进制中)操作的是补码

&:位与,进行操作的两个数的同一位上,有一个是0,该位运算的结果就是0

|:位或,进行操作的两个数的同一位上,有一个是1,该位运算的结果就是1

~:位非,进行操作的数按位取反

^:位异或,进行操作的两个数的同一位上,两个相同为0,两个不同为1(规律:一个数连续两次和另一个数做位异或运算,得到其本身的值)

System.out.println(2 & 3); // 2
System.out.println(2 | 3); // 3
System.out.println(~2); // -3
System.out.println(2 ^ 3); // 1
System.out.println(2 ^ 3 ^ 3); // 2
/*
* 2:0000 0010
* 3:0000 0011
*
* 2
* 原码:0000 0000 0000 0000 0000 0000 0000 0010
* 反码:0000 0000 0000 0000 0000 0000 0000 0010
* 补码:0000 0000 0000 0000 0000 0000 0000 0010
*
* ~2
* 补码:1111 1111 1111 1111 1111 1111 1111 1101
* 反码:1111 1111 1111 1111 1111 1111 1111 1100
* 原码:1000 0000 0000 0000 0000 0000 0000 0011
*/

<<:左移,左边的高位删除,右边的低位补0

>>:右移,因为左侧的最高位是符号位,所以要区分是0还是1;左侧的最高位是0,左侧补0;左侧的最高位是1,左侧补1 >>>:无符号右移,不论左侧的最高位是0还是1,左侧补0

System.out.println(2 << 1); // 4
System.out.println(2 >> 1); // 1
System.out.println(-2 >> 1); // -1
System.out.println(-2 >>> 1); // 2147483647
/*
* -2:
* 原码:1000 0000 0000 0000 0000 0000 0000 0010
* 反码:1111 1111 1111 1111 1111 1111 1111 1101
* 补码:1111 1111 1111 1111 1111 1111 1111 1110
*
* 右移1位操作(操作补码)
*
* 补码:1111 1111 1111 1111 1111 1111 1111 1111
* 反码:1111 1111 1111 1111 1111 1111 1111 1110
* 原码:1000 0000 0000 0000 0000 0000 0000 0001
*
* 无符号右移1位操作(操作补码)
*
* 补码:0111 1111 1111 1111 1111 1111 1111 1111
* 反码:0111 1111 1111 1111 1111 1111 1111 1111
* 原码:0111 1111 1111 1111 1111 1111 1111 1111
*/

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java基础之逻辑运算符知识总结

    一.前言 逻辑运算符 左右都是布尔类型的操作数,表达式的结果也是布尔类型 true或false 二.逻辑运算符 & 逻辑与 只要有一个操作数是false,那么结果一定是false && 短路与 效率高点,只要左边是false,那么右边就不计算,结果一定是false | 逻辑或 只要有一个操作数是true,那么结果一定是true || 短路或 效率高点,只要左边是true,那么右边就不计算,结果一定是true ! 逻辑非 结果相反 ^ 逻辑异或 左右操作数不一样结果是true,左右操

  • Java中短路运算符与逻辑运算符示例详解

    1.逻辑运算符(部分) 符号 名称 && 短路与运算符 || 短路或运算符 & 与运算符 | 或运算符 对于理工科学习者来说,逻辑运算是较为基础的概念,通常会在大一的离散数学课程中有所了解.在Java以及更多C-Like语言中,&和|会分别表示逻辑运算中的与.或,他们的运算结果与我们在数学书中所学的逻辑运算规则并无差异.但是,在实际编程的过程中,我们反而会更多使用&&和||,甚至不少同学都不了解&.|两个运算符.那么,这究竟是为什么呢? 2.短路运算

  • Java基础学习之运算符相关知识总结

    1.算术运算符 +表示加法运算符 -表示减法运算符 *表示乘法运算符 /表示除法运算符 %表示取模/取余运算符 package com.lagou.Day03; /** * 算术运算符 */ public class Demo01 { public static void main(String[] args) { //1.声明两个int类型的变量并初始化 //int ia = 6;ib = 2;//表示声明两个int类型的变量ia和ib,不推荐使用 int ia = 6; int ib = 2

  • Java基础之详细总结五种常用运算符

    一.算术运算符 算术运算符的符号通常为:加(+).减(-).乘(*).除(/).取余(%).自增(++).自减(--). 使用int类型的变量和int类型的变量做除法,得到的结果还是int类型: 使用double类型的常量和 int类型的常量做除法,会得到double类型的结果:在使用强制类型double转换可以得到double类型 System.out.println(7 / 2);//3.0 System.out.println((double)(7 / 2)); // 3.0 System

  • java数据类型和运算符的深入讲解

    一.整型变量 1.基本格式 int 变量名 = 初始值; 代码示例: public class CSDN { public static void main(String[] args) { int a=10; System.out.println(a); } } 2.java中的int是4个字节. 3.java中int的最大值和最小值 如果数大于0,则最高位为0,如果数小于0,则最高位为1.在判断数值范围时,不用考虑负数采用补码形式存储,因为补码和原码是一一对应的.当最高位是1,即为负数,后面

  • 带你盘点Java的五种运算符

    目录 1.算术运算符 2.赋值运算符 3.比较运算符 4.逻辑运算符 5.位运算符 总结 1.算术运算符 算术运算符的符号通常为:加(+).减(-).乘(*).除(/).取余(%).自增(++).自减(--). 使用int类型的变量和int类型的变量做除法,得到的结果还是int类型: 使用double类型的常量和 int类型的常量做除法,会得到double类型的结果:在使用强制类型double转换可以得到double类型 System.out.println(7 / 2);//3.0 Syste

  • java的五种数据类型解析

    不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自动初始化为默认值,除非显式地声明.简单数据类型为某一方法声明局部变量时不会自动地初始化而且会导致编译器扔出类似以下的错误消息"Variable x may not have been initialized.(x变量没有初始化)"表B定义了Java简单数据类型的默认值. 二.封装类 1av

  • Java中五种不同方法的创建对象

    前言 作为Java开发者,我们每天都会创建大量的对象,但是,我们总是使用管理依赖系统(如Spring框架)来创建这些对象.其实还有其他方法可以创建对象,在接下来的文章中我会进行详细介绍. 1.使用new关键字 这是最常见的创建对象的方法,并且也非常简单.通过使用这种方法我们可以调用任何我们需要调用的构造函数. Employee emp1 = new Employee(); 0: new #19 // class org/programming/mitra/exercises/Employee 3

  • 五分钟带你了解Java的接口数据校验

    本篇文章给大家分享平时开发中总结的一点小技巧!在工作中写过Java程序的朋友都知道,目前使用Java开发服务最主流的方式就是通过Spring MVC定义一个Controller层接口,并将接口请求或返回参数分别定义在一个Java实体类中,这样Spring MVC在接收到Http请求(POST/GET)后,就会自动将请求报文自动映射成一个Java对象.这样的代码通常是这样写的: @RestController public class OrderController { @Autowired pr

  • Redis五种数据结构在JAVA中如何封装使用

    目录 数据结构 string字符串 string字符串简介 string字符串在Java中的封装 list列表 list列表简介 队列 栈 list列表在Java中的封装 hash(字典) hash字典简介 hash字典在Java中的封装 set(集合) set集合简介 set集合在Java中的封装 zset(有序列表) zset有序列表 zset有序列表在Java中的封装 数据结构 Redis有五种基础数据结构,分别为: 1.string(字符串) 2.list(列表) 3.hash(字典)

  • Java线程的五种状态介绍

    目录 1. 线程的5种状态 2. Java线程的6种状态 3. Java线程状态的转换 1. 线程的5种状态 从操作系统层面上,任何线程一般都具有五种状态,即创建.就绪.运行.阻塞.终止. (1) 新建状态(NEW) 在程序中用构造方法创建一个新线程时,如new Thread(),该线程就是创建状态,此时它已经有了相应的内存空间和其它资源,但是还没有开始执行. (2) 就绪状态(READ) 新建线程对象后,调用该线程的start()方法就可以启动线程.当线程启动时,线程就进入就绪状态(runna

  • java 单例的五种实现方式及其性能分析

    java 单例的五种实现方式及其性能分析 序言 在23种设计模式中,单例是最简单的设计模式,但是也是很常用的设计模式.从单例的五种实现方式中我们可以看到程序员对性能的不懈追求.下面我将分析单例的五种实现方式的优缺点,并对其在多线程环境下的性能进行测试. 实现 单例模式适用于资源占用较多的类,保证一个类只有一个实例即单例.通用的做法就是构造器私有化,提供一个全局的访问点,返回类的实例. uml图: 1.饿汉式 代码实现: package com.zgh.gof23.singleton; /** *

  • 详解五种方式让你在java中读取properties文件内容不再是难题

    一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

  • 五种JAVA GUI布局管理的方式

    1. 流式布局(FlowLayout) 定义: 通俗地说,流式布局就是根据窗口大小,自动改变窗口内组件的位置.例如:原窗口大小一行可以容纳10个BUTTON,但将窗口缩小后,每行仅能容纳5个BUTTON,此时原先的10个BUTTON中的五个就会自动排列到下一行. 示例:(省略panel的使用) Hashset package 布局管理; ​ import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.

随机推荐