聊一聊Java中的各种运算符
计算机之所以叫“计算机”,其最基本用途之一就是运算,对应刚刚接触Java的小伙伴而言,熟悉并掌握Java中的各种运算符及其在表达式中的运算优先级是十分必要的。
算术运算
算术运算主要用来处理数学中的加、减、乘、除四则运算。是最简单、最常用的运算符。
1. 除与取模:数据做除法操作时,/ 是求商, % 是取余数。两个整数相除得到的结果是商的整数部分。
2. 自增与自减:在原数据的基础上执行加1或减1的操作。
- 单独使用:放在操作数据的前面和后面效果是一样的,如s++和++s效果一样。
- 参与操作:符号在操作数的前面表示先自增或自减,再参与操作。符号在操作数的后面表示先参与操作,后自增或自减。
//来源:公众号【时光与字节】
package BaseCode;
public class code1_1 {
public static void main(String[] args) {
int f=7;
int n=2;
System.out.printf("整数相除:f/n=%d\n",f/n);
System.out.printf("小数相除:f/n=%f\n",f/(float)n);
//两个整数相除,只能获得结果的整数部分,不是四舍五入。
//如想结果为小数,需将其中一个操作数转换为浮点数。 System.out.println("取模(求余数):f%n="+f%n); //自增与自减:单独使用
f--;
++n;
System.out.println("f的值:"+f+", n的值:"+n); //自增与自减:参与操作
int xf=++f;//先自加,再赋值
int yn=n--;//先赋值,再自减 System.out.println("f的值:"+f+", xf的值:"+xf);
System.out.println("n的值:"+n+", yn的值:"+yn); //++10 这种写法是错误的,常量不能自增或自减
}
}
运行结果
整数相除:f/n=
小数相除:f/n=3.500000
取模(求余数):f%n=
f的值:, n的值:
f的值:, xf的值:
n的值:, yn的值:
关系运算
用于对两个变量或数值进行比较,无论如何运算,最终结果只能为true(真)或false(假),切勿将==误写为赋值号=。
逻辑运算
用于对布尔型数据进行操作,其结果仍为布尔型。
短路运算:以&和&&为例, | 和 || 是一样的道理。
&和&&都表示与操作,当运算两边都为true时,其结果才为true。于是,当左边为false时,即可确定结果为false,右边是否运算已对结果没有影响了。
- &:不论左边为true或false,右边都要运算。
- &&:当左边为false,右边不在进行运算。
//来源:公众号【时光与字节】
package BaseCode;
public class code1_2 {
public static void main(String[] args) {
int f = 7; //变量f初始化为7
int n = 7; //变量n初始化为7
//【短路与】运算
boolean bf = (f<5) && (f++<9);
//【与】运算
boolean bn = (n<5) & (n++<9);
System.out.println("短路运算的结果为:" + bf);
System.out.println("f的结果为:" + f);
System.out.println("未短路运算的结果为:" + bn);
System.out.println("n的结果为:" + n); //n的值变了
}
}
运行结果
短路运算的结果为:false
f的结果为:
未短路运算的结果为:false
n的结果为:
分析:
bf为短路与运算的结果,f<5为假,算式右边未计算,所以f的值没有变。
bn是与运算的结果,整个算式都需计算,所以n++被执行了,n自加1。
赋值运算
将常量、变量或是表达式的值赋给一个变量,赋值运算符主要是=(等号)。
扩展赋值运算符(+=,-+,*=,/=,%=):都是将变量与右侧操作数进行算术运算,再将结果赋给变量。如:f+=5等同于f=f+5。
1. 一条语句可对多个变量赋值。
int a,b,c;
a=b=c=10; //正确写法 int i=j=k=10; //写法错误
2. 扩展赋值运算隐含了强制类型转换,看下图。
上图的代码中,n+=x未报错,但n=n+x报错了。
两个short型相加,结果应为int型。+=赋值符隐含了强制类型转换,所以没有错。
准确的说,n+=x 应该等同于
n=(n的数据类型)(n+x)
其它运算
位运算:按二进制位进行与、或、非和异或的运算。
移位运算:对二进制位进行左移和右移的操作。
<<左移:左边最高位丢弃,右边补0
>>右移:右移一位,左边空位根据原数的符号补0或1(正数补0,负数补1)
>>>无符号右移:右移一位,左边空位补0
//来源:公众号【时光与字节】
package BaseCode;
public class code1_4 {
public static void main(String[] args) {
byte a=6; // 6对应二进制:00000110
byte b=11; // 11对应二进制:00001011
System.out.println("按位与运算:a&b = "+ (a&b));//结果为:2 System.out.println("左移一位:b<<1 = "+ (b<<1));//结果为:2
}
}
// 按位与运算:6%11 左移一位:11<<1
// 00000110 00001011
// & 00001011 <<1
// ---------------- ----------------------
// 00000010 00010110
// 对应数值为:2 对应数值为:22
运行结果
按位与运算:a&b =
左移一位:b<< =
条件运算:比较表达式?表达式1:表达式2
执行规则:先计算比较表达式的值,如果为true,结果为表达式1;否则,结果为表达式2。
int x = 59;
String s = (x>60) ? "及格" : "不及格" ;
System.out.print(s);//结果s的值为:不及格
优先级
一个表达式中出现多个运算符,就有类似“先乘除后加减“这样的先后问题,通常情况下:
- 优先级高低大致顺序为:自增自减>算术运算>比较运算>逻辑运算>赋值运算;
- 如果两个运算优先级相同,则左边的表达式要比右边的表达式先处理;
- 使用小括号吧,小括号能提升算式的优先级,并且会让整个表达式逻辑结构更加清晰。如:(1+3)+(3+2)*2;
具体可参看下表,具有高优先级的运算符在表的上面,较低优先级在表的下面。
聊一聊Java中的各种运算符的更多相关文章
- 聊一聊Java中的各种运算符(转载)
计算机之所以叫"计算机",其最基本用途之一就是运算,对应刚刚接触Java的小伙伴而言,熟悉并掌握Java中的各种运算符及其在表达式中的运算优先级是十分必要的. 算术运算 算术运算主 ...
- java中的移位运算符:<<,>>,>>>总结
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- Java中的移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- Java中常用的运算符
运算符是一种“功能”符号,用以通知 Java 进行相关的运算,Java 语言中常用的运算符可分为如下几种: 算数运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符. 一.算数运算符 Java 中常 ...
- java中的移位运算符:<<,>>,>>>总结(转)
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- 【java编程】java中的移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- Java学习路线:Java中的位移运算符介绍
学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天给大家分享的技术知识是:ja ...
- Java 中的instanceof 运算符
Java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...
- Java学习笔记五:Java中常用的运算符
Java中常用的运算符 运算符是一种“功能”符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 score 的值设置为 20 ,这时候就需要一个“=”,告诉程序需要进行赋值操作. Java ...
随机推荐
- 制作你的第一个dockerfile文件
From this lesson you will从这里你将学到1,Make a Dockerfile制作一个Dockerfile2,Build a Docker Image and run构建镜像并 ...
- 洛谷:P3384 [HNOI2004]宠物收养场
原题地址:https://www.luogu.org/problemnew/show/P3384 题目简述 给定一些序列(没有重复数字),每个序列支持: 给定一些数k(对于每个序列不重复),每次在序列 ...
- window连接远程服务器报函数不支持之解决方案
1.针对window10系统 Windows+R,输入cmd,输入gpedit.msc 然后就可以启动远程连接了 2.针对window7用户 没有上述的第一个操作选项 1. 打开注册表,快捷输入 “r ...
- Java 爬虫遇到需要登录的网站,该怎么办?
这是 Java 网络爬虫系列博文的第二篇,在上一篇 Java 网络爬虫,就是这么的简单 中,我们简单的学习了一下如何利用 Java 进行网络爬虫.在这一篇中我们将简单的聊一聊在网络爬虫时,遇到需要登录 ...
- 浅谈MVC&MTV设计模式
在目前基于Python语言的几十个Web开发框架中,几乎所有的全栈框架都强制或引导开发者使用MVC设计模式.所谓全栈框架,是指除了封装网络和线程操作,还提供HTTP.数据库读写管理.HTML模板引擎等 ...
- salt-api 配置使用
salt-api 安装 配置源 (系统环境s示例是centos6) epel 源 rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/epel/6/i386/ ...
- 初识Django,了解一下大概流程
学习Django一个礼拜了,对其有了一个大概的了解,自己画了一个简单的图,虽然有点丑,但是基本上已经把自己所想已经表达 写完这篇随笔之后发现自己逻辑表述的有点不太清晰,有点乱,哪里不对,希望各位指正 ...
- pod setup 不顺利
JerryMacBook:~ jerry$ pod setup Setting up CocoaPods master repo $ /usr/bin/git clone https://github ...
- UWP 使用新版画中画 FontIcon —— 如何使用自定义字体 —— 简单分析Windows Calculator源代码
微软在新版UWP计算器中加入了一个“置顶”功能,它相当于我们之前看视频的“画中画”一样. 点击后窗体置顶,同时可以进行其他任务. 有的小伙伴说,不就是一个图标吗,去 Segoe MDL2 图标 把图标 ...
- Vue 实现点击空白处隐藏某节点(三种方式:指令、普通、遮罩)
在项目中往往会有这样的需求: 弹出框(或Popover)在 show 后,点击空白处可以将其 hide. 针对此需求,整理了三种实现方式,大家按实际情况选择. 当然,我们做项目肯定会用到 UI 框架, ...