java 布尔逻辑运算符_Java运算符

Java语言提供许多操作符。操作符是特殊的符号(symbol),它对一个或者两个、三个的操作数进行运算,然后返回一个结果,最简单的就像我们一年级学到的+ -号。一般地,可以将运算符分为四大类:算数运算符、位运算符、关系运算符、逻辑运算符。下面详细介绍:

内容大概包括:

赋值运算符

算数运算符

位运算符

关系运算符

布尔逻辑运算符

几个特殊运算符

运算符优先级

1. 赋值运算符

赋值运算符(=)是最常见的了,它将右边的值赋给左边,它的运算优先级是最低的。除了我们最熟悉的=以外,还有复合赋值+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=。这些赋值语句优先级一样,都是最低的。可以使用下面形式的赋值语句:

int x = 10,z;

int y = z = x + 1;

相当于z = x +1; y = z; 。

i = (j = k +1)/2;也是可以的,相当于 j = k +1; i = j/2; 你可能还经常遇到一种情况,要在测试条件中计算某个值,并且还要保存这个值以便继续使用。如下:

double x;

if ( (x = Math.random()) < 0.5 ) {

System.out.println(x);

}

2. 算术运算符

算数运算符用于数学运算,其操作数必须是数值类型(包括char类型),不能对boolean进行算数运算。算数运算符如下表所示:

d15dfd0a9317e77bb0ec06581fe5cd11.png

2.1 基本运算

一元加号简单地返回操作数本身的值,一元减号取反。加减乘除需要注意的就是除法,对于整数类型,除法不保留小数部分。+也可以用于字符串连接。求模返回除法操作的余数,可用于整数也可以用于浮点数。

2.2 算数与赋值复合运算(compound operator)

+=运算符先进行加法,然后赋值,比如 a += 2; 相当于 a = a + 2; 其他的完全类似。通用格式如下:

var op= expression; 相当于 var = var + expression;

符合运算除了输入更简单方便外,虚拟机执行复合赋值操作的效率也更高。

2.3 自增与自减

自增运算将操作数加1,自减运算将操作数减1。例如x = x + 1; 除了可以写成 x += 1;以外,还可以更简单地写成x++;类似地x = x-1;可以写成x--。自增和自减都有两种形式,前缀和后缀。对于前缀形式,操作数先自增(自减),然后使用自增(自减)之后的值;后缀则先使用操作数原来的值,然后再自增(自减)。一个简单的例子:

x = 10;

y = ++x; // y = 11;

y = x++ ;  // y =10;

看一个复杂一点的:

public class IncrementTest {

public static void main(String[] args) {

int i = 0, j;

i = i++;

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

j = i++ + i;

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

}

}

首先,对于i = i++; 首先提取i原来的值(0),然后i自增,此时i=1;到此完成了后缀形式的自增。接着执行赋值语句,此时使用的i是最初提取出来的0,所以将0赋给i,覆盖掉自增后的1.结果i为0;

对于 j = i++ + 1; 首先提取i的初值0,然后自增后i为1.接着运算加法,复制给j,得到j=1;i=1;

3、位运算符

Java中定义了几个位运算符,可以用于byte short char int long。位运算符列在下表中:

c866472a2b59a11943707977d0dbb77b.png

可以看到,除了按位取反外,其他都都有赋值复合操作。

Java采用的是two's-complement进行编码。对于负数,采用“取反加1”原则可以得到它的二进制表示。

取反操作很简单,将整数的二进制形式按位取反,0-->1, 1-->0.

按位与、或、异或也都很简单明了,重要的是弄明白整数的二进制表示(bit pattern)。

左移:

将所有为向左移动指定的位数,每次移动,高阶位(最左边)被移出,右边的位用0补充。这可能会导致位的丢失。而对于byte和short,Java在左移之前就自动提升为int,所以如果不超过31位,不会丢失。每次左移相当于乘以2.但是如果将二进制1移进高阶位(31或63),结果会变为负数。

右移:

右移将整数的二进制形式向右移动指定的位数。最左边的位可能会被移出,对于>>右移,高阶位使用右移之前的高阶位填充,这称为符号扩展。每次执行>>相当于除以2并丢掉所有余数,用这种方式实现除法更高效,但是要确保不会将任何位移出右端。

对于>>>,最高位不是采用原来的最高位填充,它总是用0填充,称为无符号右移。

复合类型的位操作符跟算数运算符完全类似,不再说明。

4. 关系运算符

关系运算符包括 ==、!=、>、>=、

关系运算的结果是boolean类型。对于Java任何类型(包括基本类型和引用类型),都可以使用==和!=进行相等性测试。其他的四个关系运算法只适用于数值类型(包括char)。

5.布尔逻辑运算符

下表中的布尔逻辑运算符只能对boolean类型的操作数进行操作:

c349804be40356360dfd1f748c13952b.png

很明了,不需要解释。对于短路与、或。意思是如果第一个布尔值就能确定最终结果,后面的结果就无需再计算。例如,对于逻辑与,如果第一个操作数为false,那么结果肯定为false,无需计算右边的。下面是一个有趣的例子:

if(denom != 0 && num/denom > 10)

如果denom为0,那么第一个表达式为false,后面不需要再计算,所以也就不会出现除数为0的异常。一个类似的例子:

if(car!=null && car.isSomething())

假设其中的isSomething返回布尔类型,这个也保证当car为null的时候不会进行空指针操作。

三元运算符结构为 expression ? expression1 : expression2  其中expression必须为boolean类型,如果它为true,执行expression1,否则expression2.相当于一个if else。

6. 特殊运算符

除了上面的三元运算符比较特殊以外,还有类型转换运算符(),instanceof运算符。

强制类型转换我们已经很熟悉了,instanceof运算符用于判断某个对象是否是某个类型的实例。例如,在实现Comparable接口中的compareTo方法时,经常要使用instanceof,下面是一个实现:

public int compareTo(Object o) {

if (o instanceof Comp) {

Comp c = (Comp)o;

// do compare

}

return 0;

}

测试之后进行转换,更能确保类型安全。实现Object的equals方法中也经常用到这个。

()也可以当做一个操作符。

7. 运算优先级

各运算符优先级总结如下表:

3ab99138be1003426983e79990a69392.png

说实话很难记住这些顺序,一个好的原则是如果不确定执行顺序的时候,根据需要加上(),可以使得代码更加清晰,降低模糊性。而且使用圆括号不会降低程序性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java自动化获取页面主题_基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍

1. 启动浏览器前边有详细介绍启动三种浏览器的方式(IE、Chrome、Firefox)&#xff1b;private WebDriver driver null;private String chromeDriverDir "D:\\workspace\\A_Test\\resource\\chromedriver.exe";/*** 打开谷歌浏览器&#xff1b;*/public void openCh…

js java 反射机制_java 类加载机制和反射机制

一.类的加载机制jvm把class文件加载到内存&#xff0c;并对数据进行校验、解析和初始化&#xff0c;最终形成jvm可以直接使用的java类型的过程。(1)加载将class文件字节码内容加载到内存中&#xff0c;并将这些静态数据转换成方法区中的运行时数据结构&#xff0c;在堆中生成一…

lambda 流 peek java_JDK8 流与λ表达式

λ表达式什么是λ表达式λ表达式有三部分组成&#xff1a;参数列表&#xff0c;箭头(->)&#xff0c;以及一个表达式或者语句块。public int add(int x, int y) {return x y;}转换为λ表达式(int x, int y) -> x y;去除参数类型(x, y) -> x y;无参 以及 只有一个参…

理解java虚拟机工作后了解吗_JAVA入门到再次入门——深入理解JAVA虚拟机(二)|七日打卡...

前言为什么叫做入门到到再次入门请参考前一篇或个人博客&#xff0c;在此不再赘述&#xff0c;嗯哼&#xff0c;了解了JVM的基本运行流程以及内存结构&#xff0c;算是初步认识了JVM&#xff0c;跟着课本往前走&#xff0c;继续了解根据JVM的内存模型探索java当中变量的可见性以…

java访问错误404_如何解决 Java web 项目中的 404 错误

在使用 Tomcat 进行 Java Web 开发的时候&#xff0c;经常会遇到以下 HTTP 404 错误&#xff1a;错误代码为 HTTP 404(未找到)&#xff0c;描述信息是&#xff1a;“The origin server did not find a current representation for the target resource or is not willing to di…

java double 的精度_Java Double的精度问题

Java.text类 DecimalFormatjava.lang.Objectjava.text.Formatjava.text.NumberFormatjava.text.DecimalFormatvoid setMaximumFractionDigits(int newValue) 设置某个数的小数部分中所允许的最大数字位数。void setMinimumFractionDigits(int newValue) …

java餐饮管理系统图片,基于jsp的酒店餐饮管理系统-JavaEE实现酒店餐饮管理系统 - java项目源码...

基于jspservletpojomysql实现一个javaee/javaweb的酒店餐饮管理系统, 该项目可用各类java课程设计大作业中, 酒店餐饮管理系统的系统架构分为前后台两部分, 最终实现在线上进行酒店餐饮管理系统各项功能,实现了诸如用户管理, 登录注册, 权限管理等功能, 并实现对各类酒店餐饮管…

php 验证码一直不对,ThinkPHP验证码老是出错怎么办

ThinkPHP验证码老是出错的解决办法&#xff1a;1、找到服务器php配置文件php.ini在网站根目录下建一个info.php文件。例如&#xff1a;D:\wwwRoot\wp 这个是网站的根目录&#xff0c;在此目录下&#xff0c;新建一个txt文档&#xff0c;输入如下代码&#xff1a;然后另存为info…

如何在php中插入数据并修改,php怎么同时向2张表里插入数据

情况是这个样子的&#xff1a;我要做一个发消息的表&#xff0c;因为接受人可能是多个&#xff0c;所以又给接收人一单独的表&#xff0c;(这种方案好还是全部都放到一张表里好点呢&#xff1f;)2张表的字段如下&#xff1a;message_id是第一张表的主键&#xff0c;如果收件人有…

java设计模式之道文字版,Java Web设计模式之道 PDF

资源名称&#xff1a;Java Web设计模式之道 PDF第一部分 仙人指路——设计模式简介第1章 设计模式概述1.1 设计模式是什么1.2 软件设计模式的发展历程1.3 作者阐述软件设计模式的主要方式第二部分 设计红宝书——设计模式原则详解第2章 设计原则之开闭原则2.1 何谓开闭原则2.2 …

matlab变量由非标量,matlab中的if语句

有条件性地执行语句语法if expressionstatementsend描述MATLAB计算表达式&#xff0c;如果产生一个逻辑真或者非零结果&#xff0c;然后就执行一条或者多条MATLAB命令语句。当有嵌套if时&#xff0c;每一个if必须和一个相应的end匹配。当你在if语句里面嵌套使用else if或者else…

rodbc 连接oracle,R語言 使用RODBC連接oracle數據庫

使用R語言有多種包可以連接oracle數據庫&#xff0c;我今天在這里講一下使用使用RODBC連接oracle數據庫。1. 如果你的本地是windows系統的話&#xff0c;你需要安裝oracle客戶端。2. 然后需要在ODBC管理者界面配置你要進行連接的數據庫數據及使用的驅動等信息。如下圖所示&…

oracle实验七 答案,Oracle表的常用查询实验(七)

Oracle表的常用查询实验(七)1.问题描述&#xff1a;有一个商品信息表&#xff0c;该表反应了各种商品的销售情况&#xff0c;一个产品是按照gid和gname两个字段来区分的&#xff0c;一个产品可能会有多个型号。create table T_Goods(Id int primary key,GId varchar2(10) not n…

oracle ogg00423,【案例】Oracle报错PLS-00378 PLS-00439产生原因和MOS官方解决办法

【案例】Oracle报错PLS-00378 PLS-00439产生原因和MOS官方解决办法时间:2016-11-12 21:31 来源:Oracle研究中心 作者:代某人 点击:次天萃荷净PLS-00378此版本的PL / SQL编译单元无效原因&#xff1a;编译单元是一个文件&#xff0c;其中包含的PL / SQL传递给编译器的源代…

linux系统如何备份系统软件,Linux折腾记(十三):我该如何备份系统

在前面的一些文章中&#xff0c;我反复提到经常会把系统搞崩溃&#xff0c;所以备份系统就是一件不容忽视的事情。由于Linux系统本身的优越性&#xff0c;系统的备份和还原还是比较容易的。主要表现在以下方面&#xff1a;1.Linux系统所有的数据都以文件的形式存在&#xff0c;…

linux kset subsystem 3.10内核,Kobject、Kset 和 Subsystem

2014年5月12日Kobject 、Kset 和 Subsy stem - 海王 - 博客园http://www.doczj.com/doc/93b5b6113b3567ec112d8a49.html/leav en/archiv e/2010/04/24/1719191.html 4/8件(2)4. Linux input 子系统 io 控制字段(2)5. linux 内核定时器 tim er_list 详解(2) (2)把kobject 的 kse…

linux 自定义vi dd,Vim常用命令及配置方案

几句话很久之前就接触到vim&#xff0c;初学那阵觉得vim很酷炫&#xff0c;但确实对新手不是很友好。我也就简单看了下基本操作就上手了&#xff0c;但又不是长期在vim下工作&#xff0c;这就导致了每一次重新使用vim都要再去回温下基本操作&#xff0c;很是难受&#xff0c;所…

linux指纹登录实现原理,指纹识别技术原理与基于Linux系统的指纹识别门禁系统设计...

指纹作为人体的身体特征&#xff0c;具有唯一性、稳定性和不易盗用等特点。随着指纹识别理论逐渐成熟、指纹采集工具这一难题得到解决&#xff0c;指纹识别已经成为目前最广泛应用的生物识别之一&#xff0c;逐渐取代了传统的认证识别方式&#xff0c;广泛应用于金融、公安、证…

linux wps历史版本下载,WPS Office 2019 For Linux 11.1.0.9604版携新更新发布下载

WPS Office 2019 For Linux 11.1.0.9604版本发布了&#xff0c;仅支持64位计算机&#xff0c;提供Deb和Rpm格式软件包下载。更新详情1、WPS公共&#xff1a;优化界面绘制相关api的调用效率。适配ibus和fcitx框架的输入法&#xff0c;解决无法输入中文&#xff0c;预输入显示等问…

Linux双独立显卡SLI,玩点新奇的 双显卡给你不同的“SLI”效果

显卡老是千篇一律的常规测试对于我们这些测试人员来说早就已经没有什么意思了&#xff0c;无非就是跑分&#xff0c;超频后跑分&#xff0c;拷机等等一些测试项目&#xff0c;常看我们测试的玩家应该也知道同芯片显卡除非是频率的差别非常大才会有较为明显的性能差距体现出来&a…