简介

运算符是一种特殊的符号,运算符是通过一定的运算规则操作一个或多个操作数,并生成结果的特定符号,运算符和操作数的有效组合称为表达式。

Java中运算符主要分为以下几类:

  • 赋值运算符
  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 条件运算符(三目运算符)
  • 位运算符

赋值运算符

赋值运算符用于给变量或者常量指定值,赋值运算符的符号是"="。

int a = ;  //定义时直接赋值
int b;
int c;
b = c = ; //可以在一个语句内为多个变量赋值
int d = b + ; //变量运算后再赋值,先执行右边,再执行左边

算术运算符

Java支持加减乘除和求余等基本数学运算。分别是以下几种:

运算符

说        明

一元

-

一元减,即取负

++

自增,如:++a等价于a = a + 1

--

自减,如:--a等价于a = a – 1

二元

+

加法,返回两个操作数的和

-

减法,返回两个操作数的差

*

乘法,返回两个操作数的积

/

除法,返回两个操作数的商

%

取模,返回两个操作数整除后的余数

加法运算符:+

double a = 1.1;
double b = 1.2;
double sum = a + b;
System.out.println(sum); //输出2.3

减法运算符:-

double a = 2.2;
double b = 1.1;
double sub = a - b;
System.out.println(sub); //输出1.1

乘法运算符:*

int a = ;
double b = 1.2;
double multiply = a * b;
System.out.println(multiply); //输出1.32

除法运算符:/

除法运算符有点特殊:如果运算的两个值都是int,得到的结果也是int类型,会把小数点直接去掉,也不会四舍五入

int a = ;
int b = ;
double c = a/b;
System.out.println(c); //10初4本来结果是2.5,但是两个int类型数相除结果是int类型数,尽管将结果值赋给了double,
              //但输出结果变成了2.0,相当于运算完成时将小数点给去了,再转换为2.0 double a2 = 5.2;
double b2 = 3.1;
double c2 = a2/b2;
System.out.println(c2); //两个double值运算,输出结果:1.6774193548387097 System.out.println( / 0.0); //除数为double型0.0,输出负无穷大
System.out.println( / ); //除数为0,运行时会报错

求余运算符:%

int a = ;
int b = ;
double c = 3.2;
System.out.println(a%b); //输出2
System.out.println(a%c); //1.7999999999999998 System.out.println(%); //输出0
System.out.println(%); //运行会出错

求负:-

int i = -;
int i2 = -i;
System.out.println(i2); //输出1

自加:++

int i = ;
i++; //相当于将i的值加1;
System.out.println(i); //输出2

自加符号既可以放在变量前面,也可以放在变量后面,放在前面先把操作数加1,再进行表达式的运算,放在后面则相反。

int i1 = ;
int i2 = ;
int i3 = i1++; //此时i3的值为1,i1的值为2;它是先将i1的值赋给了i3,再将i1加1;
int i4 = ++i2; //此时i4的值为2,i2的值也为2;它是先将i2的值加1,再将值赋给i4;

自减:--

作用类似于自加

int i1 = ;
int i2 = ;
int i3 = i1++; //此时i3的值为1,i1的值为0;它是先将i1的值赋给了i3,再将i1减1;
int i4 = ++i2; //此时i4的值为0,i2的值也为0;它是先将i2的值减1,再将值赋给i4;

关系运算符(比较运算符)

关系运算符可以测试两个操作数之间的关系(但不会改变操作数的值),关系表达式的结果为boolean型true/false:

运算符

说        明

==

等于,检查两个操作数是否相等

!=

不等于,检查两个操作数是否不相等

>

大于,检查左操作数是否大于右操作数

>=

大于等于,检查左操作数是否大于或等于右操作数

<

小于,检查左操作数是否小于右操作数

<=

小于等于,检查左操作数是否小于或等于右操作数

System.out.println( == );  //结果为true
System.out.println( != ); //结果为true
System.out.println(true == false); //结果为false

逻辑运算符

逻辑运算符用于操作boolean类型的变量或常量

运算符

说        明

Java

一元

!

逻辑非(NOT)

二元

&

逻辑与(AND)(不短路)

左边为false,依然会运算右边

|

逻辑或(OR)

如左操作数为true,依然运算右边操作数

&&

短路与

如左操作数为false,则不运算右操作数

||

短路或

如左操作数为true,则不运算右操作数

^

异或

当两个操作数不同时返回true,相同则返回false

看例子

System.out.println(!true);  //结果为false
System.out.println( > && > ); //结果为false
System.out.println( > || > ); //结果为true
System.out.println(true ^ false); //结果为true,异或,相当于把第一个前面一个值true取反,再进行“或”运算

下面我们来看一下 |于||的区别

int a = ;
int b = ;
if(a == | b++ > ){
System.out.println(b); //输出b的值为2,按位或虽然|符号左边结果为true,但依然会执行|符号右边的代码
}

将|改为||

int a = ;
int b = ;
if(a == || b++ > ){
System.out.println(b); //输出b的值为1,||符号左边结果为true,不会再执行||符号右边的代码
}

条件运算符(三目运算符)

它的一般形式是:

表达式1 ? 表达式2 : 表达式3

根据表达式1的结果来判断执行表达式2还是表达式3,如果表达式1的结果为true,则执行表达式2,否则执行表达式3;
条件运算符在某些情况下能够替代小型的if…else语句。
String s =  >  ? "1大于2" : "1不大于2";
System.out.println(s); //输出 1不大于2

位运算符

位运算符既参加运算的两个数据,按二进制位进行运算。Java的位运算符有如下7个:按位与(&)、按位或(|)、按位非(~)、按位异或(^)、左移运算符(<<)、右移运算符(>>)、无符号右移运算符(>>>)。

具体介绍可以参考下面这篇文章:

http://www.cnblogs.com/yezhenhan/archive/2012/06/20/2555849.html

运算符的优先级

很多情况下,一个表达式由多个运算符组成,优先级决定运算符的计算顺序:

优先级

运    算    符

1

括号: ()和[]

2

一元运算符:-、++(前置)、--(前置)、!

3

算术运算符:*、/、%、+和-

4

关系运算符:>、>=、<、<=、==和!=

5

逻辑运算符:&、|、&&和||

6

条件运算符:? :

7

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

尽管运算符有优先级,一个表达式中会根据表达式运算符的优先级进行先后运算,但是在实际编程中如果一个表达式很长也不会推荐这样写,而是分为几步写,因为写在一起可读性太差。

[Java入门笔记] Java语言基础(三):运算符的更多相关文章

  1. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  2. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  3. [Java入门笔记] Java语言简介

    前言 学习Java有一段时间了,但是一直缺少一个系统的思想,现在重新通过书籍中.网上的文章,视频等资料,整理与回顾Java的知识点. 言归正传,让我们先从了解Java语言开始. Java语言的由来 J ...

  4. [Java入门笔记] Java语言基础(二):常量、变量与数据类型

    常量与变量 什么是常量和变量 常量与变量都是程序在运行时用来存储数据一块内存空间 常量: 常量的值在程序运行时不能被改变,Java中声明常量必须使用final关键字.常量还可以分为两种意思: 第1种意 ...

  5. [Java入门笔记] 面向对象编程基础(三):成员变量和局部变量

    在类中,变量根据定义的位置不同,可以分为成员变量和局部变量.

  6. [Java入门笔记] Java语言基础(五):数组

    简介 数组可用用于存储存储多个数据,Java的数组要求所有的数组元素具有一种相同的数据类型.一旦数组初始化完成,数组在内存中的空间被固定下来,长度不可改变,即使把数组的元素清空,所占用的空间依然被保留 ...

  7. [Java入门笔记] Java语言基础(四):流程控制

    流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下几种: 顺序结构 顺序结构,顾名思义,是指程序从上往下逐步顺序执行.中间没有任何的判断和跳转. 分支结构 Java提供两种分支结构: ...

  8. [Java入门笔记] Java语言基础(一):注释、标识符与关键字

    注释 什么是注释? 注释是我们在编写代码时某段代码.某个方法.某个类的说明文字,方便大家对于代码的阅读.被注释的内容不会被编译.执行. Java的注释分为三种类型:单行注释.多行注释.文档注释. 单行 ...

  9. [Java入门笔记] 面向对象编程基础(一):类和对象

    什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...

随机推荐

  1. 不在 sudoers 文件中。此事将被报告。

    使用Linux,初学使用root不要太方便,工作中却不会给你这样的,必须要用自己的账号.新账号需要添加sudo的权限. su 使用root登陆 visudo 在root下添加自己的用户名 root A ...

  2. js晋级篇——前端内存泄漏探讨

    1.IE7/8 DOM对象或者ActiveX对象循环引用导致内存泄漏 循环引用分为两种: 第一种:多个对象循环引用 var a=new Object; var b=new Object; a.r=b; ...

  3. DirectShow Filter的开发实践

    一.介绍 摄像头图像采集处理在业界有着多种成熟的方案.从老的DirectShow.Grabber技术,到新的Windows Media Foundation框架,网络上都有着丰富的参考资料.OpenC ...

  4. 利用Swashbuckle生成Web API Help Pages

    利用Swashbuckle生成Web API Help Pages 这系列文章是参考了.NET Core文档和源码,可能有人要问,直接看官方的英文文档不就可以了吗,为什么还要写这些文章呢? 原因如下: ...

  5. Nancy之静态文件处理

    今天我们来谈谈Nancy中的静态文件(JavaScript,CSS等)该如何处理. 在前面的Demo中,我们也已经用到了这一块的内容, 但并没有深入理解,只是停留在使用的层面上. 在进入今天的正题之前 ...

  6. 常见的Web实时消息交互方式和SignalR

    标签: WebSocket SignalR 前言 1. Web消息交互技术 1.1 常见技术 1.2 WebSocket介绍 1.3 WebSocket示例 2. Signal 2.1 SignalR ...

  7. Java基本概念(2)J2EE里面的2是什么意思

    J2EE里面的2是什么意思 J2SE,J2SE,J2ME中2的含义要追溯要1998年.1998年Java 1.2版本发布,1999年发布Java 1.2的标准版,企业版,微型版三个版本,为了区分这三个 ...

  8. 3、Python字符串和循环

    1.while循环 #猜lucky_number = 6 #如果比6大,提示你猜的大了 #如果比6小,提示你猜的小了 #猜的等于6,提示Bingo #限制3次 lucky_num = 6 count ...

  9. 51nod 算法马拉松18 A 染色问题

    染色问题 基准时间限制:1 秒 空间限制:10240 KB 分值: 40 一个n(3<=n<=100)个点的完全图,现在给出n,要求将每条边都染上一种颜色k(1<=k<=n), ...

  10. AbstractFactoryPattern(抽象工厂)

    /** * 抽象工厂模式 * 分为四部分 * 1.产品接口 * 2.产品实例 * 3.工厂接口(生产同一个产品的不同等级,这里是主要区别) * 4.工厂实例 * 工厂类最好用单例模式,但在这里主要是说 ...