Java编程思想 4th 第3章 操作符
有了数据,还需要进行数据间的运算,因此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章 操作符的更多相关文章
- Java编程思想 4th 第2章 一切都是对象
Java是基于C++的,但Java是一种更纯粹的面向对象程序设计语言,和C++不同的是,Java只支持面向对象编程,因此Java的编程风格也是纯OOP风格的,即一切都是类,所有事情通过类对象协作来完成 ...
- Java编程思想 4th 第1章 对象导论
所有编程语言都提供抽象机制. 面向对象编程似乎是一种很好的编程思想和方式,面向对象编程中的对象简洁描述是:对象具有状态.行为和标识.状态指的是数据存储,存储的数据能反应状态:行为指的是方法,方法表示对 ...
- 《Java编程思想》第一二章
前段时间一直通过网络教程学习Java基础,把面向对象部分学完之后本来打算继续深入学习,但是感觉自己操之过急了,基础根本不够扎实,所以入手了一本<Java编程思想>,希望先把基础打好,再深入 ...
- 《Java编程思想》读书笔记-赋值操作符
在最底层,Java中的数据是通过使用操作符来操作的.接下来我们逐一认识一些操作符. 怎么运用操作符 操作符接受一个或多个参数,并生成一个新值. 基本操作符 赋值操作符 符号:= 作用:取右边的值,把它 ...
- 《Java编程思想》笔记 第一章 对象导论
1.抽象过程 Q:什么是对象??? A: 1) 万物皆对象 --- 对象具有状态,行为和标识 2)程序是对象的集合,他们通过发送消息来告诉彼此要做的 3)通过创建包含现有对象的包的方式来创建新类型 ...
- Think in Java(Java编程思想)-第2章 一切都是对象
1. String s = "asdf"//创建一个String引用,并初始化. String s = new String("asdf")//创建一个新对象, ...
- 《Java编程思想》笔记 第二章 一切都是对象
1.对象存储位置 对象的引用存在栈中,对象存在堆中.new 出来的对象都在堆中存储.栈的存取速度较快. 所有局部变量都放在栈内存里,不管是基本类型变量还是引用类型变量,都存储在各自的方法栈中: 但是引 ...
- Java编程思想读书笔记 第一章 对象导论
抽象过程 纯粹的面向对象程序设计方式: 万物皆为对象: 对象可以存储数据,还可以在其自身执行操作 程序是对象的集合: 通过发送消息告诉彼此要做的 每个对象都有自己的由其它对象构成的存储:可以在程序中构 ...
- Java编程思想学习杂记(1-4章)
程序流程控制 移位运算符 移位运算符面向的运算对象是二进制的位,可单独用它们处理整数类型.左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)." ...
随机推荐
- autoboxing and unboxing
Why does 128==128 return false but 127==127 return true public static void autoboxingUnboxing(){ Int ...
- Two Sum III - Data structure design
Design and implement a TwoSum class. It should support the following operations: add and find. add - ...
- 如何在数据表中存取图片 - 回复 "三足乌" 的问题
问题来源: http://www.cnblogs.com/del/archive/2009/05/28/1491186.html#1801853 准备工作:1.在空白窗体上添加: ClientData ...
- DAY8-Python学习笔记
老样子课有点多,睡觉有点多,玩手机有点多,总结就是事情有点多.Python项目还没找好所以就没上手. 今天学习内容贴几张图...
- rabbitmq .erlang.cookie文件疑惑
1.安装方式常见的rabbitmq安装方式有两种:rpm安装和二进制安装(编译安装). 2..erlang.cookie是什么.erlang.cookie是erlang实现分布式的必要文件,erlan ...
- 【刷题】BZOJ 1061 [Noi2008]志愿者招募
Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完 ...
- Python OS模块操作文件和目录
#-*-coding:utf-8-*- import os import shutil ###############OS模块############## #获得当前python脚本的工作目录 os. ...
- C 语法中static 和inline联合使用
最近在学习阶段,翻阅代码.发现有一个用法比较让我奇怪,就上网查了一下 ? 1 static inline void somefunction(void); 这里是举例说明,这行代码是放在.h文件中的. ...
- Android 捕获组合键
android中捕获组合键http://blog.csdn.net/wenlibin1985/article/details/5579359 Android组合键http://www.eoeandro ...
- spark 性能调优(一) 性能调优的本质、spark资源使用原理、调优要点分析
转载:http://www.cnblogs.com/jcchoiling/p/6440709.html 一.大数据性能调优的本质 编程的时候发现一个惊人的规律,软件是不存在的!所有编程高手级别的人无论 ...