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 ...
随机推荐
- 洛谷 P4389 付公主的背包 解题报告
P4389 付公主的背包 题目背景 付公主有一个可爱的背包qwq 题目描述 这个背包最多可以装\(10^5\)大小的东西 付公主有\(n\)种商品,她要准备出摊了 每种商品体积为\(V_i\),都有\ ...
- 解题:BZOJ 2989 数列
题面 学习二进制分组 题目本身可以看成二维平面上的问题,转成切比雪夫距离后就是矩形和了 二进制分组是将每个修改添加到末尾,然后从后往前二进制下进位合并,这样最多同时有$\log n$组,每个修改只会被 ...
- AdaBoost原理详解
写一点自己理解的AdaBoost,然后再贴上面试过程中被问到的相关问题.按照以下目录展开. 当然,也可以去我的博客上看 Boosting提升算法 AdaBoost 原理理解 实例 算法流程 公式推导 ...
- Java基础-编写问候语-“Hello World”
Java基础-编写问候语-“Hello World” 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编写“Hello World”程序 1>.编写源代码 任何文本编辑起都 ...
- Ubantu里面的Sublime Text3不支持中文的解决办法
参考的大佬链接:https://github.com/lyfeyaj/sublime-text-imfix 更新然后将系统升级到最新版本,在linux终端输入 sudo apt-get update ...
- SQL记录-PLSQL-DBMS输出
PL/SQL DBMS输出 DBMS_OUTPUT是一个内置的软件包,能够显示输出显示调试信息,并从PL/ SQL块,子程序,包和触发器发送消息.我们已经使用这个包在我们所有的教程中. 让我们来看 ...
- HDU 3094 树上删边 NIM变形
基本的树上删边游戏 写过很多遍了 /** @Date : 2017-10-13 18:19:37 * @FileName: HDU 3094 树上删边 NIM变形.cpp * @Platform: W ...
- FFT(Rock Paper Scissors Gym - 101667H)
题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...
- thinkphp5学习总结!
数据库操作之原生sql操作 <?php namespace app\index\controller; use think\Db; class Index { public function i ...
- 【CTF WEB】服务端请求伪造
服务端请求伪造 如你所愿,这次可以读取所有的图片,但是域名必须是www开头 测试方法 POST /index.php HTTP/1.1 Host: 218.2.197.236:27375 Conten ...