Java之路(二) 操作符
操作符比较简单,这里只点一下注意事项和要点,请牢记。
操作符接受一个或多个参数,并生成一个新值。
Java中,几乎所有的操作符都只能操作基本类型。
例外是 = == 和 !=,它们可以操作所有的对象。此外,String类支持+和+=。
1.赋值 =
基本类型存储了实际的数值,所以为基本类型变量赋值是将一个地方的内容赋值到变量所表示的地址。
为对象赋值时,实际操作的是引用。我们如下图所示,假设T1和T2是同一个类的两个对象的引用,分别指向各自的对象。开始如A所示,当执行赋值T1=T2后,如B所示,可以看到,引用T1和T2都指向了T2指向的对象,而T1指向的对象却无法再访问了,这种现象叫做别名现象。

如何避免别名现象呢?
可以使用这种方式赋值,T1.length=T2.length,T1.width=T2.width,可以保证两个对象彼此独立。但是这违背了面向对象的设计原则。
与此相似,当向一个方法传递对象时,实际上传递的也是引用,也会造成别名问题。
2.算数操作符
二元操作符:+ - * / % += -= *= /=
一元操作符:+ -
一元减号用于转变数据的符号。一元加号只是为了与一元减号相对应,它唯一的用处是将较小的类型提升为int。
3.自增和自减
有前缀式和后缀式两种,是除了涉及赋值的操作符以外,唯一具有副作用的操作符。
4.关系操作符
关系操作符生成布尔结果,计算的是操作数中的值之间的关系。
关系操作符:< > <= >= == !=
==和!=适用于所有的基本数据类型,其他比较操作符不适用于布尔类型。
基本类型之间的比较使用 == 和 != 即可。
当比较两个对象的实际内容时,必须使用所有对象都适用的equals()方法(不适用于基本类型),使用 == 和 != 比较的是对象的引用。
注意:equals()默认行为是比较引用,可以进行对象实际内容的比较是因为在相关类库中做了覆盖,因此当我们创建自己的类时,必须在类中覆盖equals()方法。
5.逻辑操作符
逻辑操作符:&& || !
根据参数的逻辑关系,生成一个布尔值。
只能应用于布尔值。
不可以将非布尔值当做布尔值在逻辑表达式中使用。
具有短路性质。
6.直接常量
有时候编译器不知道创建什么样的类型,可以用与直接常量相关的字符来指导编译器。
如 0xff,0177,100f,100L,10D等。
指数的表示方法:1.39E-43f。
7.按位操作符
按位操作符:& | ~ &= |= ^=
操作位。
8.移位操作符
移位操作符:<< >> <<= =>>
注意:对char,byte和short类型的数值进行移位处理前,会将它们转换成int类型,而且得到的结果也为int类型。只有数值右端的低5位有用(int值的范围)。同理,long类型的数值进行移位操作后,得到的结果右端的低6位有用。
9.三元操作符
三元操作符: ? :
10.字符串操作符
字符串操作符: + +=
用以连接不同的字符串。
如果表达式以一个字符串起头,后续的所有操作数都必须是字符串型,
技巧:有时会用一个空的String + 基本类型变量,以执行对基本类型的字符串的转换,不用显示地调用Integer.toString()。
11.类型转换
截尾:将一个浮点值转换为整型值时,会舍去小数部分。
舍入:想在将一个浮点值转换为整型值时进行四舍五入的操作,要使用java.lang.Math()中的round()方法。
round方法是java.lang的一部分,不需要额外导入。
提升:对基本数据执行算数运算或者按位运算时,只要类型比int小(char,byte,short),运算前就将其自动转换为int,结果也为int类型。一般而言,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。如果想把结果赋给较小的数据类型,需要使用类型转换,这可能造成信息丢失。
12.Java没有sizeof
C和C++中使用sizeof()的最大原因是为了移植。因为不同数据类型在不同机器上可能有不同的大小,在进行一些与存储空间有关的运算时,必须知道具体类型有多大,sizeof()可以实现。
Java中数据类型的大小固定,在所有机器中大小相同,因此不需要sizeof(),它已经被设计在语言中。
Java之路(二) 操作符的更多相关文章
- JAVA之路(二)
学道酬勤,这是第二次学习JAVA,感觉如醍醐灌顶一样,理解很多思想和道理. 本博只是自己对JAVA的一些理解,具体定义以及用法百科里有. 我为什么在博客园内记录自己的学习过程呢,因为我想有人知道我在学 ...
- Java之路——名词解释(一)
一.开篇 许多人在初接触Java的时候,都会被各种Java的英文缩写名词给弄得头晕脑胀.看一个技术,内容里又会有一堆其他的技术名词,看了半天不知所云.尝试去查一下这些名词的解释,除了非常学术性的解释之 ...
- Java之路——敬JAVA初学者(作者:MoMo)
作为一名大四的毕业生,大学三年过,有得有失.作为一个喜欢编程,喜欢JAVA的人,自学其实是一件美事,很有意思的事.要是能再找个女朋友一起学.嘿嘿,就不枉在大学走了一遭啊! 要离开学校了,还是想留 ...
- Java之路——环境配置与编译运行
本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解 ...
- Java之路 ——初识Eclipse
零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...
- Java从零开始学二十九(大数操作(BigIntger、BigDecimal)
一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中 ...
- Java入门指南-03 操作符与表达式
一.赋值操作符 在 Java 语言里,等号称为赋值操作符.例:a = b + 100;注意,不要把 Java 语言理解为数学.在 Java 里,这个等号的作用是“赋值”,即右侧的值赋给左边的变量. 要 ...
- Java之路——初识Eclipse
零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前 ...
- 实战Java虚拟机之二“虚拟机的工作模式”
今天开始实战Java虚拟机之二:“虚拟机的工作模式”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...
- Java设计模式(二) 工厂方法模式
本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...
随机推荐
- BZOJ刷题指南(转)
基础(65) 巨水无比(4):1214.3816:2B题:1000A+B:2462:输出10个1 模拟/枚举/暴力(15):4063傻子模拟:1968小学生暴力:1218前缀和暴力:3856读英文:4 ...
- 洛谷 P2178 [NOI2015]品酒大会 解题报告
P2178 [NOI2015]品酒大会 题目描述 一年一度的"幻影阁夏日品酒大会"隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发"首席品酒家"和 ...
- VUE.JS 窗口发生变化时,获取当前窗口的高度。
VUE.JS # 窗口发生变化时,获取当前窗口的高度. mounted () { const that = this; window.onresize = () => { return (() ...
- SHOW_PAGE_TRACE
入口文件开启APP_DEBUG配置文件里添加了'SHOW_PAGE_TRACE' => true,控制器中显示模板在页面右下角也有trace图标但是鼠标放上面不显示手型光标,还是箭头,点不动但是 ...
- ThinkPHP框架学习(一)
这几天呢,断断续续地在看孙叔华老师的ThinkPHP教程,期间还做了一些其他事情,出去办了点事,总结总结下一学期规划等等,不知不觉间又过去了大半个星期.现在呢,看完了一天的教程,在这里,还是希望稍微总 ...
- 贪心算法:Codevs 1044 拦截导弹
---恢复内容开始--- #include <iostream> #include <cstdio> #include <cstdlib> #include < ...
- [原]JUnit 自定义扩展思路
1. 理解Annotation,http://www.cnblogs.com/mandroid/archive/2011/07/18/2109829.html 2. JUNIT整体执行过程分析,htt ...
- 关于SQL注入,你应该知道的那些事
戴上你的黑帽,现在我们来学习一些关于SQL注入真正有趣的东西.请记住,你们都好好地用这些将要看到的东西,好吗? SQL注入攻击因如下几点而是一种特别有趣的冒险: 1.因为能自动规范输入的框架出现,写出 ...
- js深复制
一般来讲深复制主要是为了复制js对象中的引用类型,引用类型在普通的赋值操作下相当于是引用,修改复制对象也会影响原对象,简单的方法的话可以使用JSON.parse(JSON.stringify(obj) ...
- 第6月第6天 opengles 三角形
1. http://blog.csdn.net/u010963658/article/details/52691578 2.多张图 https://www.oschina.net/question/2 ...