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(),它已经被设计在语言中。

时间: 2024-11-10 08:24:09

Java之路(二) 操作符的相关文章

JAVA之路(二)

学道酬勤,这是第二次学习JAVA,感觉如醍醐灌顶一样,理解很多思想和道理. 本博只是自己对JAVA的一些理解,具体定义以及用法百科里有. 我为什么在博客园内记录自己的学习过程呢,因为我想有人知道我在学它,从而对我形成一种督促,让我不能轻易言弃. 简单的对JAVA做一下总结: 1:什么是面向对象编程,它就是一种编程思想. 通过把事物抽象成具有属性和行为的实体来清晰编程的层次感,通过修饰符.规范判断来保护程序的安全,通过继承简化代码量.(还未复习到多态就先不总结这一点) 面向对象编程即为,事物抽象为

java痛苦学习之路[二] ---JSONObject使用

一.Strut2必须引入的包 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: 1.commons-lang.jar 2.commons-beanutils.jar 3.commons-collections.jar 4.commons-logging.jar 5.ezmorph.jar 6.json-lib-2.2.2-jdk15.jar 当然除了这些包,strut2基础包也得引入 struts2-core-2.1.6.jar freemarker-2.

JAVA编程思想(2) - 操作符(二)

5. 直接常量 -一般来说,如果程序里使用了"直接常量",编译器可以准确的知道要生成什么样的类型,但有时候却是模棱两可的.这时候需要我们对编译器进行适当的"指导" -直接常量后面的后缀字符标示了它的类型. -指数记数法:e代表"10的幂次" -注意如果编译器能够正确的识别类型,就不必在数值后附加字符,例如语句: float f4 = 200; 不存在含糊不清的地方,所以200后面不需要加L,但是对于:float f4 = 1e-43f; 编译器通

Java从零开始学二十九(大数操作(BigIntger、BigDecimal)

一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型).BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法.另外,BigInteger 还提供以下运算:模算术.GCD 计算.质数测试.素数生成.位操作以及一

Java之路 ——初识Eclipse

零.大纲 一.前言 二.获取Eclipse 三.运行Eclipse 四.创建及运行第一个Java Project 五.界面介绍 六.如何调试 七.获取插件 八.Eclipse 快捷键 九.总结 一.前言 俗话说,工欲善其事,必先利其器.在<Java之路--环境配置与编译运行>一章中,我们已经通过记事本,开始了我们的第一个Java程序.在文章,我们了解到要运行一个Java程序,并不是单单的在一个类中运行,可能会引用到别的类,引用到别的Jar包.简单的时候,项目引用一个两个jar包就可以了,但大多

java设计模式(二)单例模式 建造者模式

(三)单例模式 单例模式应该是最常见的设计模式,作用是保证在JVM中,该对象只有一个实例存在. 优点:1.减少某些创建比较频繁的或者比较大型的对象的系统开销. 2.省去了new操作符,降低系统内存使用频率,减轻GC压力. 3.保证核心代码的唯一性,比如交易引擎. 单例模式看似是最简单的设计模式. public class Singleton { //私有构造方法,防止实例化 private Singleton(){ } //创建类的实例的时候加载 private static Factory f

C#与JAVA的区别(二)

C#(C-Sharp)是Microsoft的新编程语言,被誉为"C/C++家族中第一种面向组件的语言".然而,不管它自己宣称的是什么,许多人认为C#更像是Java的一种克隆,或者是Microsoft用来替代Java的产品.事实是否是这样的呢? 本文的比较结果表明,C#不止是Java的同胞那么简单.如果你是一个Java开发者,想要学习C#或者了解更多有关C#的知识,那么本文就是你必须把最初10分钟投入于其中的所在. 一.C#.C++和Java C#的语言规范由Microsoft的Ande

Java编程思想(二) —— 初始化与清理

(一)操作符一章的int类型数据溢出的问题在Java7的版本中仍然存在,而且溢出的结果千奇百怪. public class Hello { public static void main(String[] args) { int i = Integer.MAX_VALUE; System.out.println(i); System.out.println(i*4); System.out.println(i*5); } } 结果分别为2147483647,-4,2147483643. 当应用中

Java之路——环境配置与编译运行

本文大纲 一.开篇 二.JDK下载 三.JDK安装 四.环境配置 五.初识Java编译 六.Java与Javac 七.第一个Java程序 八.总结 九.参考资料 一.开篇 通过对之前Java之路的了解之后,相信初学者们都对Java有了一个比较深印象的了解了.但是事情不能总停留在理论层面,还得多多实现,才能见真知.我觉得,学习一样东西,要遵循理论--实践--理论这样一个套路.先了解事情的基本概念,弄懂基本概念后,要想方设法的用到生活的点点滴滴上,这样能加深理论的记忆以及发现自己的盲点.在重复的实践

Android流媒体开发之路二:NDK开发Android端RTMP直播推流程序

NDK开发Android端RTMP直播推流程序 经过一番折腾,成功把RTMP直播推流代码,通过NDK交叉编译的方式,移植到了Android下,从而实现了Android端采集摄像头和麦克缝数据,然后进行h264视频编码和aac音频编码,并发送到RTMP服务器,从而实现Android摄像头直播.程序名为NdkRtmpEncoder,在这里把整个过程,和大体框架介绍一下,算是给需要的人引路. 开发思路 首先,为什么要用NDK来做,因为自己之前就已经实现过RTMP推流.RTMP播放.RTSP转码等等各种