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 ...
随机推荐
- ctrl+E 快速显示当前打开的编辑列表
ctrl+E 快速显示当前打开的编辑列表
- PASCAL VOC数据集分析(转)
PASCAL VOC数据集分析 PASCAL VOC为图像识别和分类提供了一整套标准化的优秀的数据集,从2005年到2012年每年都会举行一场图像识别challenge. 本文主要分析PASCAL V ...
- UDP ------ UDP 和 TCP 的对比
UDP是无连接协议,客户端和服务器通信之前不需要建立握手连接: UDP没有应答机制,所以也没有重发机制,很大的可能会造成丢包.收到重复包.乱序的情况: UDP可以实现局域网广播功能,即某个主机可以向所 ...
- 20181103 Nginx(布尔教育)
nginx介绍 对标Apache服务器 目录介绍 conf 配置文件 html 网页文件 logs 日志文件 sbin 主要二进制程序 控制命令 ./nginx # 启动 nginx -t # 测试配 ...
- angular.module()参数问题
var app = angular.module('myApp', []); 第二个参数是依赖的模块,因为这里不需要依赖其它模块,因此为空,但是[]不能省略.
- postman提取接口的返回值及动态设置变量(一)
一.提取接口返回值 1.当返回值是返回JSON时 let json = JSON.parse(responseBody); // responseBody是包含整个返回内容的字符串 let foo ...
- artTemplate
1.http://www.cnblogs.com/jiqiyoudu/p/4588042.html
- javascript完美拖拽的实现
直接上代码: HTML代码: <!DOCTYPE HTML> <html lang="en-US"> <head> <meta chars ...
- 20155207王雪纯 2016-2017-2 《Java程序设计》第六周学习总结
20155207 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第10章 输入/输出 10.1 InputStream与OutputStream 10.1. ...
- Ajax和jsonp区别
大多数情况下,无论是框架还是自己实现都是通过Ajax的方式来向后端请求数据的,而Ajax之间是通过传输json格式的文件来进行数据的传输的,大家对Ajax也很熟悉了,那么为什么我又要使用jsonp呢? ...