有了数据,还需要进行数据间的运算,因此Java中也有数据间运算的各种符号,书本称之为操作符,正确的翻译应该是运算符。

Java中的运算符同C++相同,运算符同运算符对象构成表达式,表达式是运算对象及运算符组成的式子,对表达式求值将得到一个结果,单独的变量或者字面值也算表达式,结果是其本身。运算符分为:一元运算符、二元运算符、三元运算符。一元即一个作用对象,二元两个作用对象,以此类推。

运算符有先后优先之分,正如先乘除后加减一样,此规则称为优先级。另外,运算符还具有结合律,也即一个运算符是先和该运算符左侧对象还是右侧对象结合进行计算。比如,对于如下代码,就体现了结合律:

int i = 1, j = 2, k = 3;
i += j += k += 5;

上面代码中由于三个都是加法赋值运算符+=,并且加法赋值运算符是右结合的, 所以该表达式从右向左开始计算,因此k=8,j=10,i=11。

赋值运算符是二元运算符,左右两侧各一个运算对象,对于右侧赋值运算符并没有太多要求,只需右侧能够提供一个值即可,而左侧则必须是一个左值,也就是说,左侧运算对象必须拥有一块内存,它能够存储右侧的值。

赋值运算符作用于基本类型时,是拷贝右侧对象的值到左侧。作用于类对象引用时,则结果是赋值运算符左右两侧的引用最终都指向右侧引用绑定的对象。

在调用对象的method时,传递给method的参数实际上就是一个用赋值运算符进行初始化的过程,即用实际的实参初始化method的形参,由于Java是传值调用,因此最后实参和形参都指向实现所绑定的对象。这是类指针行为,因此最终改变的是实参所引用的对象。

Java中的boolean类型支持位运算,个人觉得是个畸形的东西,因为首先Java没有规定boolean的位数,其次boolean类型在逻辑上进行位运算也是无意义的,而Java设计目的是简洁,不知道为什么Java会支持。

算术运算符、自增自减运算符和关系运算符同C++完全相同,逻辑运算符和C++略有不同。在C++中,其他类型,诸如char、int、double甚至指针类型都能转换为boolean类型,但Java中不允许这一转换,因此在逻辑运算符中必须让表达式结果生成boolean类型,但C++中逻辑运算符的短路求值属性被Java保留了下来。例如a && b,如果a的结果是false,那么就没有必要再计算b了。

Java中也有直接常量,按照C++中接地气的翻译应该是字面常量,其前缀和后缀的形式决定了其类型,前缀比如0、0x表示八进制或者十六进制,而后缀f,L等则表示float还是Long类型。另外,Java中还有一个可以看做中缀的e,这是一种指数记数法。

Java中还有按位运算符及移位运算符,它们是绝大多数人都没用过的东西。让人意外的是,Java中的boolean类型支持位运算,个人觉得是个畸形的东西,因为首先Java没有规定boolean的位数,其次boolean类型在逻辑上进行位运算也是无意义的,而Java设计目的是简洁,不知道为什么Java会支持。

Java继承了C++中唯一的一个三元运算符,三元运算符的作用是简化代码,然而Java中似乎并不待见它。

Java字符串操作使用了类型转换,实际上我觉得C++的输出流更好用,另外Java中没有sizeof运算符,因为Java中基本类型的内存占用位数是固定的,实际上C++中提供sizeof运算符其原因并不是基本类型的大小随平台变化,真正原因在于C++能直接操作内存的,在直接操作内存时需要明确得知欲操作内存的大小。

Java编程思想 4th 第3章 操作符的更多相关文章

  1. Java编程思想 4th 第2章 一切都是对象

    Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...

  2. Java编程思想 4th 第1章 对象导论

    所有编程语言都提供抽象机制. 面向对象编程似乎是一种很好的编程思想和方式,面向对象编程中的对象简洁描述是:对象具有状态.行为和标识.状态指的是数据存储,存储的数据能反应状态:行为指的是方法,方法表示对 ...

  3. 《Java编程思想》第一二章

    前段时间一直通过网络教程学习Java基础,把面向对象部分学完之后本来打算继续深入学习,但是感觉自己操之过急了,基础根本不够扎实,所以入手了一本<Java编程思想>,希望先把基础打好,再深入 ...

  4. 《Java编程思想》读书笔记-赋值操作符

    在最底层,Java中的数据是通过使用操作符来操作的.接下来我们逐一认识一些操作符. 怎么运用操作符 操作符接受一个或多个参数,并生成一个新值. 基本操作符 赋值操作符 符号:= 作用:取右边的值,把它 ...

  5. 《Java编程思想》笔记 第一章 对象导论

    1.抽象过程 Q:什么是对象??? A:   1) 万物皆对象 --- 对象具有状态,行为和标识 2)程序是对象的集合,他们通过发送消息来告诉彼此要做的 3)通过创建包含现有对象的包的方式来创建新类型 ...

  6. Think in Java(Java编程思想)-第2章 一切都是对象

    1. String s = "asdf"//创建一个String引用,并初始化. String s = new String("asdf")//创建一个新对象, ...

  7. 《Java编程思想》笔记 第二章 一切都是对象

    1.对象存储位置 对象的引用存在栈中,对象存在堆中.new 出来的对象都在堆中存储.栈的存取速度较快. 所有局部变量都放在栈内存里,不管是基本类型变量还是引用类型变量,都存储在各自的方法栈中: 但是引 ...

  8. Java编程思想读书笔记 第一章 对象导论

    抽象过程 纯粹的面向对象程序设计方式: 万物皆为对象: 对象可以存储数据,还可以在其自身执行操作 程序是对象的集合: 通过发送消息告诉彼此要做的 每个对象都有自己的由其它对象构成的存储:可以在程序中构 ...

  9. Java编程思想学习杂记(1-4章)

    程序流程控制 移位运算符 移位运算符面向的运算对象是二进制的位,可单独用它们处理整数类型.左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)." ...

随机推荐

  1. three.js:Failed to execute 'texImage2D' on 'WebGLRenderingContext解决方案

    three.js加载图片时,出现Failed to execute 'texImage2D' on 'WebGLRenderingContext .Tainted canvases may not b ...

  2. BAT等公司必问的8道Java经典面试题,你都会了吗?

    工作多年以及在面试中,我经常能体会到,有些面试者确实是认真努力工作,但坦白说表现出的能力水平却不足以通过面试,通常是两方面原因: 1.“知其然不知其所以然”.做了多年技术,开发了很多业务应用,但似乎并 ...

  3. jQuery--Excel插件js-xlsx

    参考博客:http://www.jianshu.com/p/74d405940305 github地址:SheetJS / js-xlsx js引入 <script type="tex ...

  4. 【uoj#209】[UER #6]票数统计 组合数+乱搞

    题目描述 一个长度为 $n$ 的序列,每个位置为 $0$ 或 $1$ 两种.现在给出 $m$ 个限制条件,第 $i$ 个限制条件给出 $x_i$ .$y_i$ ,要求至少满足以下两个条件之一: 序列的 ...

  5. OpenSSL 自签名证书

    通过下面9步,可以轻松生成自签名证书. 1.安装.部署OpenSSL 略 2.创建文件夹(下面通常root文件夹).用来放即将创建的各种证书等.如:I:\Key10.167.219.64 3.在roo ...

  6. Visual Categorization with Bags of Keypoints

    1.Introduction and backgrounds 作为本周的论文之一,这是一篇bag of features的基本文章之一,主要了解其中的基本思路,以及用到的基本技术,尽量使得细节更加清楚 ...

  7. WEB入门一 网页设计基础

    本章简介 在当今社会,网页是网络信息共享和发布的主要形式.而HTML (Hyper Text Mark-up Language),即超文本标记语言,是创建网页基础.本章将学习HTML文档的基本结构.组 ...

  8. vmware中centos7设置静态IP

    1.vmware—>Edit—>Virtual Network Editor,选中vmnet8-Nat设置,查看网关IP 2.在centos中设置: vi /etc/sysconfig/n ...

  9. D. Vitya and Strange Lesson Codeforces Round #430 (Div. 2)

    http://codeforces.com/contest/842/problem/D 树 二进制(路径,每个节点代表一位) #include <cstdio> #include < ...

  10. zookeeper的安装及共享锁的应用

         Zookeeper的安装及共享锁的应用 1.zookeeper的安装 1.1  下载安装包 Wget http://mirror.bit.edu.cn/apache/zookeeper/zo ...