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)." ...
随机推荐
- 链表java实现
链表是用指针将多个节点联系在一起,通过头节点和尾节点还有节点数量,可以对链表进行一系列的操作.是线性表的链式存储实现. 1.链表是多个不连续的地址组成在一起根据指针链接在一起的,由多个节点组成,每个节 ...
- nginx配置虚拟路径下载文件(.apk)
公司将安卓apk文件放到服务器上,实现用户点击链接并下载 nginx version 1.14.1 nginx配置修改 server { listen 80; server_name localhos ...
- 状压DP入门详解+题目推荐
在动态规划的题型中,一般叫什么DP就是怎么DP,状压DP也不例外 所谓状态压缩,一般是通过用01串表示状态,充分利用二进制数的特性,简化计算难度.举个例子,在棋盘上摆放棋子的题目中,我们可以用1表示当 ...
- [AT2401] [arc072_e] Alice in linear land
题目链接 AtCoder:https://arc072.contest.atcoder.jp/tasks/arc072_c 洛谷:https://www.luogu.org/problemnew/sh ...
- 【BZOJ2989】数列(CDQ分治,扫描线)
[BZOJ2989]数列(CDQ分治) 题面 BZOJ 权.....权限题.. 题解 Description 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和 ...
- 【科技】KD-tree随想
大概就是个复杂度对的暴力做法,在你不想写二维线段树等的时候优秀的替代品. 优点:思路简单,代码好写. 他大概有两种用法(虽然差不多). 在平面坐标系中干一些事情: 例如最常规的平面最近最远点,不管是欧 ...
- 20135239 Linux内核分析 期中总结
期中总结 链接 网易云课堂 MOOC 摘录与实验内容 第一周: http://www.cnblogs.com/20135239-yxlm/p/5216842.html 第二周: http://www. ...
- 单点登录(十八)----cas4.2.x客户端增加权限控制shiro
我们在上面章节已经完成了cas4.2.x登录启用mongodb的验证方式. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程 也完成了获取管理员身份属性 ...
- Andorid APK反逆向
Andorid APK反逆向解决方案---梆梆加固原理探寻http://blog.csdn.net/androidsecurity/article/details/8892635 Android AP ...
- RF - selenium - open browser
*** Settings ***Library Selenium2Library *** Test Cases ***Open baidu with Chrome Open Browser http: ...