一、赋值操作符

在 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. koa2-connect-history-api-fallback 使用

    单页面应用程序(SPA)通常使用一个web浏览器可以访问的索引文件,比如index.html,然后,在HTML5 History API的帮助下(vue-router就是基于History API实现 ...

  2. Centos7 安装 Amazon Corretto 8

    yum install dejavu-sans-mono-fonts dejavu-serif-fonts jpackage-utils wget https://d3pxv6yz143wms.clo ...

  3. Python深入学习之特殊方法与多范式

    Python深入学习之特殊方法与多范式 Python一切皆对象,但同时,Python还是一个多范式语言(multi-paradigm),你不仅可以使用面向对象的方式来编写程序,还可以用面向过程的方式来 ...

  4. HTML中Data的数据类型

    "data"类型的Url格式,是在RFC2397中提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入. 例如对于img这个Tag,哪怕这个图片非常非常的小 ...

  5. 手写一个简单到SpirngMVC框架

    spring对于java程序员来说,无疑就是吃饭到筷子.在每次编程工作到时候,我们几乎都离不开它,相信无论过去,还是现在或是未来到一段时间,它仍会扮演着重要到角色.自己对spring有一定的自我见解, ...

  6. 【AMAD】dogpile.cache -- 一个Python缓存API,提供一套通用的接口来适配不同的缓存后端

    简介 动机 作用 用法 个人评分 简介 Dogpile1由两套子系统组成,其中一个是基于另一个来构建的. dogpile提供了dogpile lock的概念,这个控制结构让一个线程可以被选为一些资源的 ...

  7. 安卓的一些UI美化框架的使用

    目录 一.前言 二.Android-Bootstrap 三.Sweet Alert Dialog 四.ExplosionField 一.前言 在这里记录一些用到过的觉得还算不错的UI第三方开源美化框架 ...

  8. DFS(深度优先搜索)和BFS(广度优先搜索)

    深度优先搜索算法(Depth-First-Search) 深度优先搜索算法(Depth-First-Search),是搜索算法的一种. 它沿着树的深度遍历树的节点,尽可能深的搜索树的分支. 当节点v的 ...

  9. eclipse的debug

    打了断点,发起请求,eclipse有响应,但是断点行没有绿色也就是没有进入.提示source not found.此时应该将工程添加入路径,add->project->要调试的工程.res ...

  10. java生成0~9个9个不相等的整数

    HashSet<Integer> hs=new HashSet<Integer>(); Integer i=0; while (i<9){ int s=(int) Mat ...