[Java 基础]运算符和表达式

Java运算符

(1)赋值操作符

赋值操作符(=)表示:取右边的值(即右值),把它复制给左边(即左值)。

右值可以是任意的常量、变量或表达式(只要可以生成一个值)。

左值必须是一个明确的、已命名的变量。

public class Test {
 public static void main(String[] args) {
 int num = 10;
         System.out.println("num = " + num);
         num = 20;
         System.out.println("num = " + num);
     }
 }

(2)算术操作符

加号(+)减号(-)乘号(*)除号(/)取模(%)

与C/C++一样,JAVA也支持同时进行运算和赋值操作符的简化写法。

以下两种写法是等价的:

num = num + 20;    //num加20,然后赋值给num
num += 20;         //num加20,然后赋值给num 

(3)一元操作符

一元加号(+)一元减号(-)表示数值的正负。

int x = -10;    //把负数-10赋值给x
 int y = +10;    //把正数10赋值给y,一般+省略
 System.out.println("x = " + x);
 System.out.println("y = " + y);

(4)自增与自减操作符

自增操作符是++

自减操作符是--

例:++a 等价于 a = a+1;

自增和自减操作都可以分为前缀式和后缀式。

以自增为例,

int x = 1;
 int y = 1;
 System.out.println("x = " + ++x);    //前缀式
 System.out.println("y = " + y++);    //后缀式

Output:

x = 2
y = 1

由此可见,前缀式是先递增,然后再代入表达式;而后缀式是先代入表达式,再对自身进行递增运算。

(5)关系操作符

关系操作符生成的是一个 boolean 结果,它们计算的是操作数的值之间的关系。

如果关系是真的,关系表达式的结果为 true;反之,结果为 false

关系操作符包括小于(<)大于(>)小于或等于(<=)大于或等于(>=)等于(==)以及不等于(!=)

(6)逻辑操作符

逻辑操作符包括与(&&)或(||)非(!),它们根据参数的逻辑关系,生成一个boolean值。

(7)括号操作符

括号操作符(),可以提高括号中表达式的执行优先级。

int result1 = 1 + 2 + 3 * 4 - 5;
 int result2 = (1 + 2 + 3) * 4 - 5;
 System.out.println("1 + 2 + 3 * 4 - 5 = " + result1);
 System.out.println("(1 + 2 + 3) * 4 - 5 = " + result2);

Output:

1 + 2 + 3 * 4 - 5 = 10
 (1 + 2 + 3) * 4 - 5 = 19

(8)位操作符

按位与(&)按位或(|)异或(^)取反(~)左移(<<)右移(>>)无符号右移(>>>)

(9)三元操作符

三元操作符比较特殊,它有三个操作数。它的格式为:

(布尔表达式)? 值A : 值B

如果布尔表达式的值为true,则结果为值A;反之,结果为值B。

public static int GetMaxNum(int x, int y) {
 return (x >= y) ? x : y;
 }
 
 public static void main(String[] args) {
 int x = 5;
 int y = 20;
     System.out.println("The max of " + x + " and " + y + " is : " + GetMaxNum(x, y));
 }

:Java中只有一个三元操作符。 

(10)直接常量

一般说来,程序中使用了”直接常量“,编译器可以准确地知道要生成什么样的类型,但有时候却是模棱两可的。

直接常量后面的后缀字符可以标志它的类型。

若为大写(或小写)的 L ,表示 long 型。

若为大写(或小写)的 F ,表示 float 型。

若为大写(或小写)的 D ,表示 double 型。

十六进制数适用于所有整数数据类型,以前缀为 0x(或0X),后面跟随0~9大小写的a~f

八进制数由前缀0以及后续的0~7的数字来表示。

public class Test{
 public static void main(String args[]){
 long l = 123L;      // long型:后缀为大写或小写的L
  float f = 12.3f;    // float型:后缀为大写或小写的F
  double d = 54.345d; // double型:后缀为大写或小写的D
  
 int x = 0xffffffff; // 十六进制数:前缀为0x,后续用0~9,a~f的数字来表示
  char c = 017;       // 八进制数:前缀为0,后续用0~7的数字来表示
     }
 };

(11)不同于C/C++,在JAVA中没有sizeof操作符

运算符的优先级和结合性

当多个运算符出现在同一个表达式中,会存在一个问题:谁先谁后呢?

这就涉及到运算符的优先级别的问题。在一个多运算符的表达式中,运算符优先级不同会导致最后得出的结果差别甚大。

例如,(1+3)+(3+2)*2,这个表达式如果按加号最优先计算,答案就是 18,如果按照乘号最优先,答案则是 14。

再如,x = 7 + 3 * 2;这里x得到13,而不是20,因为乘法运算符比加法运算符有较高的优先级,所以先计算3 * 2得到6,然后再加7。

下表中具有最高优先级的运算符在的表的最上面,最低优先级的在表的底部。

类别

操作符

关联性

后缀

() [] . (点操作符)

左到右

一元

+ + - !〜

从右到左

乘性

* /%

左到右

加性

+ -

左到右

移位

>> >>>  <<

左到右

关系

>> = << =

左到右

相等

==  !=

左到右

按位与

左到右

按位异或

^

左到右

按位或

|

左到右

逻辑与

&&

左到右

逻辑或

| |

左到右

条件

?:

从右到左

赋值

= + = - = * = / =%= >> = << =&= ^ = | =

从右到左

逗号

左到右

表达式

所谓表达式,是指由常量、变量或是操作数与运算符所组合而成的语句。

如下是一个简单的算术表达式语句

x = 2 + 3;

参考资料

Java编程思想

http://www.w3cschool.cc/java/java-operators.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏鸿的学习笔记

python源码阅读笔记之对象体系(一)

412
来自专栏听雨堂

水晶报表文本在web中无法两端对齐

        在Web上利用水晶报表显示一段文本,用的是动态加载rpt的方法,结果出来的文本效果如下: ?         右边很不齐,于是回到水晶报表10...

1768
来自专栏Python研发

一起来学Go --- (go的枚举以及数据类型)

枚举指一系列的相关的常量,比如下面关于一个星期的中每天的定义,通过上篇博文,我们可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在go语言中通常用...

611
来自专栏技术博文

PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

一,十进制(decimal system)转换函数说明  1,十进制转二进制 decbin() 函数,如下实例  echo decbin(12); //输出 ...

3116
来自专栏Coding迪斯尼

自制Monkey编程语言编译器:增加数组操作API和Mapsh数据类型

963
来自专栏腾讯Bugly的专栏

【特斯拉组件】iOS高性能PageController

1.组件介绍 Page是企鹅FM研发的分页组件,包括支持分页非交互切换(通过方法调用导航切换)和交互切换(屏幕的手势滑动),多个分页Controller和Vie...

3844
来自专栏WD学习记录

Python数据结构与算法笔记(2)

栈、队列、deques、列表是一类数据的容器,它们数据项之间的顺序由添加或删除的顺序决定。一旦一个数据项被添加,它相对于前后元素一直保持该位置不变。诸如此类的数...

761
来自专栏C/C++基础

2018腾讯内部调岗面试试题1——使用C/C++但不能用sizeof判断操作系统是32位还是64位

2018上半年折腾了一回,想换个后台开发岗尝试锻炼一下自己,面了三个部门,将有关有意思的题目汇总记录下来,供大家参考。

621
来自专栏积累沉淀

JavaScript基本包装类型

知识点: 1.基本包装类型概述 2.Boolean类型 3.Number类型 4.String类型 为了便于操作基本类型值,ECMAScript...

1897
来自专栏叁金大数据

自学Python十二 战斗吧Scrapy!

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。

923

扫码关注云+社区