有了数据,还需要进行数据间的运算,因此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. Lottie开源库实现Android动画效果

    Lottie简介 Lottie是一个支持Android.iOS.React Native,并由Adobe After Effects制作aep格式的动画,然后经由bodymovin插件转化渲染为jso ...

  2. BZOJ 2143 飞飞侠(分层最短路)

    飞飞国是一个N×M的矩形方阵,每个格子代表一个街区.然而飞飞国是没有交通工具的.飞飞侠完全靠地面的弹射装置来移动.每个街区都装有弹射装置.使用弹射装置是需要支付一定费用的.而且每个弹射装置都有自己的弹 ...

  3. springmvc接收date类型参数

    springmvc在表单提交接收date类型参数的时候会报错:Cannot convert value of type [java.lang.String] to required type [jav ...

  4. P4645 [COCI2006-2007 Contest#3] BICIKLI

    题意翻译 给定一个有向图,n个点,m条边.请问,1号点到2号点有多少条路径?如果有无限多条,输出inf,如果有限,输出答案模10^9的余数. 两点之间可能有重边,需要看成是不同的路径. 题目描述 A ...

  5. BZOJ 50题纪念?

    是的,这次的纪念帖也比较磕碜-- 但是还有更磕碜的↓↓↓ 2017年6月7日,我在我的旧博客发了个bzoj10题纪念-- 那时我还是一个又young又simple的菜鸡(现在可能也是--),省选之后觉 ...

  6. 【堆的启发式合并】【P5290】[十二省联考2019]春节十二响

    Description 给定一棵 \(n\) 个节点的树,点有点权,将树的节点划分成多个集合,满足集合的并集是树的点集,最小化每个集合最大点权之和. Limitation \(1~\leq~n~\le ...

  7. 【最小割/二分图最大独立集】【网络流24题】【P2774】 方格取数问题

    Description 给定一个 \(n~\times~m\) 的矩阵,每个位置有一个正整数,选择一些互不相邻的数,最大化权值和 Limitation \(1~\leq~n,~m~\leq~100\) ...

  8. java中的date类型转换为js中的日期显示 我改

    function dateChange(javaDate){ if(javaDate){ return javaDate.substr(0,10).replace(/-/g,"/" ...

  9. JAVA 加密算法初探DES&AES

    开发项目中需要将重要数据缓存在本地以便在离线是读取,如果不对数据进行处理,很容易造成损失.所以,我们一般对此类数据进行加密处理.这里,主要介绍两种简单的加密算法:DES&AES. 先简单介绍一 ...

  10. D. Petya and Array 树状数组

    题意: 给出一个数组,元素有正有负有0,问其区间和小于 t 的子区间的个数. sum[ r ]-sum[ l-1 ]<t,其中sum是a的前缀和. 实现的方法就是从前往后对于每一个sum[ i ...