简介

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

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. DotNet指定文件显示的尺寸

    在项目中开发中,有时候需要将文件的尺寸进行控制,例如需要将文件的尺寸指定为字节,TB等.现在提供一个方法,实现将指定文件的尺寸, 提供:"字节", "KB", ...

  2. 使用dynamic linq 解决自定义查询的若干弊端

    在项目中想必大家肯定是使用各种ORM, 如:NH.EF.fluent Data. 然而我在使用ORM的这几年中,随着数据库的结构越来越复杂,自定义查询的越来越多,但是一直没有解决一个问题就是自定义查询 ...

  3. Android动画的理解

    基础知识 在我们开始讲Android动画这个知识点之前,我们了解下相应的基础知识点. Shape篇 一般用Shape定义的XML文件是存放在Drawable目录下,广泛应用于在Button.TextV ...

  4. Dapper ORM VS SqlSugar ORM的 8场对决

    CUP和.NET SQL版本不同也会存在少许差距,但不会有质变,下面的测试结果仅供参考 比赛规则 1.统一使用Realse版本的最新 DLL,Realse模式启用程序 2.为了平衡CPU和数据库空闲情 ...

  5. HTML5 Application cache初探和企业应用启示

    Application Cache 在自己做的开源项目( https://github.com/etoah/Lucien ) 用到了HTML5 的Application Cache,现总结如下: 目录 ...

  6. urlMappings与URL映射

    此配置节的作用就是往Web程序中添加URL的映射,从而达到用户访问映射后的URL(如/Page/AAA)也能访问到源URL(如/Page/PageAAA.aspx)的效果.这也是URL映射本来的作用. ...

  7. C#~异步编程续~.net4.5主推的await&async应用

    返回目录 之前写过两篇关于异步编程的文章,详细可以进入C#~异步编程和C#~异步编程在项目中的使用 .net的各个版本都有自己主推的技术,像.NET1.1中的委托,.NET2.0中的泛型,.NET3. ...

  8. sns社区架构设计案例分享

    今天看了个社区,了解了一下该产品的架构设计,做一下分享. 内容来源:http://www.jinhusns.com/Document/FrameworkDocument/?type=cc 一. 架构使 ...

  9. Java动态代理全面分析

    代理模式 解说:给某一个对象提供一个代理,并由代理对象控制对原对象的引用: 代理模式需要以下几个角色: 1  主题:规定代理类和真实对象共同对外暴露的接口: 2  代理类:专门代理真实对象的类: 3 ...

  10. GJM :SqlServer语言学习笔记

    ----------------------------SqlServer RDBMS 关系型数据库管理系统 Row/Record 行 Colimn/Attribute 列 Field/Cell 字段 ...