一、赋值操作符

在 Java 语言里,等号称为赋值操作符。
例:a = b + 100;
注意,不要把 Java 语言理解为数学。在 Java 里,这个等号的作用是“赋值”,即右侧的值赋给左边的变量。

要求:
等号左边必须是变量
将等号右边表达式的值,赋给左边的变量

1、区分初始值与赋值

在定义一个变量的时候,可以指定初始值。
例如:int a = 10; // 定义一个变量 a,初始值为 10
int b; // 如果未指定初始值,则初始值为 0

2、理解赋值操作的过程

赋值操作分 2 步运行:①先计算等号右侧的式子的值,②再把右侧的值赋给左侧的变量。
例如:
int a = 10;
a = a + 99; // 重点理解这一行的赋值操作
System.out.println("a 的值为 " + a );

我们来分析一下 a = a + 99 这一行, 实际上计算机是分两步来运算出结果的:
(1) 首先,计算出左侧表达式(a+99)的值,为 109
(2) 然后,将右侧的值赋给左侧的变量,即 a=109

3、组合赋值操作符

赋值操作符可以和其他操作符组合起来使用,例如:
a += b;
a -= b;
a *= b;
a /= b;
a %= b;
规则都是一样的,相当于: a = a + b
示例:
int a = 10;
a += 12; // 相当于 a = a + 12
System.out.println("现在 a 为: " + a);
所以,a 的最终值为 22

二、常量

在 Java 里,用 final 表示常量。类比一下:变量,是可以变化的量;常量,是不能变化的量。所以,以下代码会报错:
final double PI = 3.14; // 定义常量 PI,初始值为 3.14
PI = 3.0; // 错误! PI 是 final 修饰的,其值不能修改!

三、自增操作符

在 Java 语言里,++ 称为自增操作符。例:
int a = 10;
a++;
System.out.println("现在 a 为: " + a);
其中,a ++ 可以理解为 a = a +1 。所以,最终 a 的值为 11。

1、前置自增与后置自增

自增操作符有 2 种写法,写在前面的称为前置自增,写在后面叫后置
自增。例如:后置自增:
int b = 10;
a = b++ ;

后置自增时,先把 b 的值代入式子运算,之后再对 b 自增加 1。所以,
最终的结果 a 为 10, b 为 11。

前置自增:
int b = 10;
a = ++b ;
前置自增时,先对 b 自增加 1,然后再代入式子运算。

2、自减操作符

同样的,还有一套自减操作符 -- ,例如:
a = b --;
和自增没区别,就不详细讲解。

四、操作符的优先级

当一个表达式里有多种操作符时,就是明确操作符的优先级。也就是说,哪些部分先运算,哪些部分后运算。比如:
a - b * 10 / 2
这个表达式看起来很简单。之所以我们会觉得简单,因为我们已经事先知道了算术符的优先级(小学就学过了嘛!)。但是,当把多种 Java 操作符用在一起时,就不那么简单的。比如:
a>10 && !ok
对于这样的式子,存在关系操作符 > 和逻辑操作符 && ! 。要经行运算,就必须明确优先级。在这里,关系操作符比逻辑操作符的优先
级高,而逻辑非又与逻辑与的优先级高。所以,它的运算顺序是这样的:
( (a>10) && (!ok) )
先运算 a>10 再运算 !ok ,再进行逻辑与的运算。在 Java 语言里,操作符约有几十种,想要记住它们的优先级顺序是不
太容易的。但是大家可以放心的是,我们并不需要强记这些优先级,而只是需要知道几种常用的操作符的优先级就足够了。
提示:在搞不清优先级顺序的时候,请使用小括号来显示指定顺序。

五、类型转换操作符

在整型与浮点型之间,允许类型转换。例如:
double a = 12.77;
int b = (int) a;
System.out.println("b 的值:" + b);
其中,
a 是 double 型
b 是 int 型
b = a 赋值时,要求左右两侧的类型相同。所以,把 a 转换在 int型。也就是说,一个 double 类型可以转成 int 类型。把这对小括号称
为类型转换操作符。反过来,一个 int 类型也可以转换成 double 类型。例如:
int c = 10;
double d = (double) c;

1、类型转换时的数据损失

在 double -> int 的转换过程中,数据可能发生损失。
例如:double a = 12.77;int b = (int) a; 转换后的结果为 12,即小数部分被截断。
反过来,在 int -> double 的转换过程中,数据不会损失。例如:
int c = 10;
double d = (double) c;

2、显式转换与隐式转换

在类型转换的过程中,如果没有风险和数据损失,就可以把类型转换符省略。例如:
int c = 10;
double d = c; // 省略 (double) 转换符
在 d=c 的过程中,发生了隐式的类型转换,相当于double d = (double)c ;
所以,称之为隐式转换。即自然而然的、没有任何风险的转换。

3、注意事项

(1) 小数转整数时,小数部分被截断。注意不是四舍五入!
(2) 默认其他类型是不能转换的。
例如,boolean 与 int 是不能相互转换的,boolean k = true;int a = (int) k; // 错!别乱写!

六、结尾
今天讲了算术运算符、关系运算符、逻辑运算符,还有一些讲了操作符、自增自减、操作符的优先级等。下一篇,我们来讲顺序结构、分支结构、循环结构。

更多精彩,请关注公众号

Java入门指南-03 操作符与表达式的更多相关文章

  1. AngularJS快速入门指南03:表达式

    AngularJS通过表达式将数据绑定到HTML. AngularJS表达式 AngularJS表达式写在双大括号中:{{ 表达式语句 }}. AngularJS表达式绑定数据到HTML的方式与ng- ...

  2. 测试人员学Java入门指南

    目标读者 本指南特别适合有Python基础的同学学习Java入门,对于没有任何编程经验的同学可能会存在困难. 为什么测试人员要学Java 选择Java,应该不错.TesterHome测试论坛知名大佬基 ...

  3. Java入门指南-02 变量

    一.回顾上一篇讲到了常用的DOS命令.如何创建第一个程序.打印.注释与空白. 那么我们已经学会了使用System.out.println() 可以来输出一个值.进一步的,我们可以用它来显示简单的算术运 ...

  4. java入门了解03

    ASSCII表 . 1.final关键字    (1)含义:最终的意思,修饰方法,类,变量    (2)特点:          A:修饰类,不能被继承          B:修饰的方法,不能被重载  ...

  5. Java入门指南-04 顺序、分支、循环

    顺序结构 从上至下,依次执行 if 语句在 Java 里,用 if 语句来实现“当满足 XXX 条件时,执行 YYY”这样的逻辑判断.例如,在使用共享单车时需要检查人的年纪.如果在 12 岁以下,则禁 ...

  6. Java入门指南-01 基本概要说明

    一.Java语言概述 Java是一门面向对象编程语言.编程,即编写程序.程序对于我们来说,应该是有所了解的.只是有可能你们不知道而已.比如,我们电脑上的 QQ.谷歌浏览器等,都叫做应用程序. 二.本系 ...

  7. AngularJS快速入门指南04:指令

    AngularJS通过指令将HTML属性进行了扩展. AngularJS指令 AngularJS指令是带有ng-前缀的扩展HTML属性. ng-app指令用来初始化AngularJS applicat ...

  8. AngularJS快速入门指南01:导言

    AngularJS使用新的attributes扩展了HTML AngularJS对单页面应用的支持非常好(SPAs) AngularJS非常容易学习 现在就开始学习AngularJS吧! 关于本指南 ...

  9. AngularJS快速入门指南02:介绍

    AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...

随机推荐

  1. H3C 模拟器 pc与sw直连 登录web

    配置与上一节相同 开启web功能,并登录 [sw1]ip http enable [sw1]local-user admin New local user added. [sw1-luser-mana ...

  2. java:svn

    1.配置: 在windows系统中,操作svn的工具最长用的是小乌龟svn 服务器端(项目所在的服务器上):在java开发中几乎所有的服务器为Linux系统 需要在Linux系统中进行安装 1.修改h ...

  3. Ceph osd故障硬盘更换

    正常状态: 故障状态: 实施更换步骤: (1)关闭ceph集群数据迁移: osd硬盘故障,状态变为down.在经过mod osd down out interval 设定的时间间隔后,ceph将其标记 ...

  4. Matlab中的eig函数和Opecv中eigen()函数的区别

    奇异值分解的理论参见下面的链接 http://www.cnblogs.com/pinard/p/6251584.html https://blog.csdn.net/shenziheng1/artic ...

  5. PJzhang:关闭wps小广告和快速关闭445端口

    猫宁!!! ​​   kali linux上安装的wps,没有广告,而且轻巧简洁.   如果你在windows上安装wps,除了ppt.word.excel,还会有一个h5的应用,当然,最令人烦扰的当 ...

  6. SVN(linux版)安装与使用

    SVN(linux版)安装与使用 一 简述:  SVN有2种运行方式,一种是 linux自带的轻量级服务器svnserve,一种是基于Apache的. 基于svnserve的,默认端口为3690,通过 ...

  7. collections(python常用内建模块)

    文章来源:https://www.liaoxuefeng.com/wiki/897692888725344/973805065315456 collections collections是Python ...

  8. webdriervAPI(下载文件)

    from  selenium  import  webdriver driver  =  webdriver.Chorme() driver.get("http://www.baidu.co ...

  9. Java架构师 成长之路 -- 跳出程序员陷阱(转载)

    本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路. 如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序 ...

  10. 论文阅读 | Generating Fluent Adversarial Examples for Natural Languages

    Generating Fluent Adversarial Examples for Natural Languages   ACL 2019 为自然语言生成流畅的对抗样本 摘要 有效地构建自然语言处 ...