《 Java 编程思想》CH03 操作符
2020-03-01 05:23
99 查看
《Java编程思想》CH03操作符
在最底层,Java中的数据是通过操作符来操作的。
操作符
- ,
-
,*
,*
,=
与其他语言类似 - 几乎所有的操作符只能操作“基本类似”,而
=
,==
,!=
是例外 - String类支持和
=
操作符,表示拼接操作,在进行拼接的操作会尝试将非String的元素转换为String(调用tostring()) - 赋值操作符
=
的左边(左值)必须是一个明确的已命名的变量。
赋值
在为对象“赋值”时,其实质是拷贝“引用”,需要注意“别名现象”
packagecom.company.ch03; classTank{ intlevel; } publicclassAssignment{ publicstaticvoidmain(String[]args){ Tanktank1=newTank(); Tanktank2=newTank(); tank1.level=12; tank2.level=13; System.out.println("tank1="tank1.level); System.out.println("tank2="tank2.level); tank1=tank2; tank1.level; System.out.println("tank1="tank1.level); System.out.println("tank2="tank2.level); } } //tank1=12 //tank2=13 //tank1=14 //tank2=14
方法调用中的别名问题
packagecom.company.ch03; classLetter{ charc; } publicclassPassObject{ staticvoidf(Lettery){ y.c='z'; } publicstaticvoidmain(String[]args){ Letterx=newLetter(); x.c='a'; System.out.println("x.c="x.c);//a f(x); System.out.println("x.c="x.c);//z } }
不管是那种别名问题,关键是要理解到拷贝的是引用,不是对象。
算数操作符&自增与自减&按位操作符
- 整数除法不会四舍五入,而是直接舍去小数位
- 其余与C中的一样
关系操作符
关系操作符与C也是类似,有一点比较特殊的是在Java中
==和
!=可以用在对象上,其比较的是引用,而不是对象内的值,如果要比较两个对象是否相等(语义上),通常调用
equals函数来比较。
Integern1=newInteger(47); Integern2=newInteger(47); n1==n2;//false n1.equals(n2);//true
equals
默认是比较引用,所以在自己实现的类中需要覆盖equals
方法才能进行语义上的比较
逻辑操作符
&&,
||和
!操作只能用于布尔值,与C不同,对一个非布尔值进行逻辑运算不会对该值强制转换,会报编译错误
Java中的逻辑操作符也有“短路”现象
直接常量
- 十六进制
0x/0X
前缀0-9
和a-f
- 八进制
0
前缀0-8
- 后缀
l/L
表示long
类型 - 后缀
f/F
表示float
类型 - 后缀
d/D
表示double
类型 - 指数记数法:
1.39E-43
表示$1.39timese^{-43}$
移位操作符
- 移位操作符只能用于处理整数类型
>>
符号扩展,>>>
0扩展- 对char、byte、short类型进行移位运算,在进行移位之前会先转回为int
三元运算符
boolean-exp?value0:value1
字符串操作符和=
- 字符串中操作符和
=
表示“拼接”操作 - 如果一个表达式以字符串开头,那么其后续操作数都必须是字符串类型(不是则进行强制转换)
类型转换操作符
类型转换(cast
)是指,在适当的时候,Java会将一种数据类型自动转换为另一种。
显式的类型转换如下:
inti=200; longl=(long)i; intj=(int)l;
类型转换:
- 窄式转换,需要显式指定(如long转int)
- 扩展转换,无需显式指定(如int转long)
- Java允许任何基本类型之间的类型转换,除了布尔值。
- “类”数据类型不允许类型转换
截尾和舍入
- 当float或double转向整型时,总是对数字进行截尾
- 如果需要舍入,可以调用
java.lang.Math.round()
提升
一个表达式中出现的最大的数据类型决定了该表达式最终结果的数据类型,如int类型与long类型相加,得到一个long类型。
Java没有sizeof
由于Java中所有基本数据类型的大小都是明确的,所以不需要sizeof。BTW,boolean不是没有明确嘛。
本文首发于
Code&Fun
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Java编程思想学习(二) 操作符
- 【java编程思想笔记】第三章—操作符
- Java 编程思想——第三章 操作符总结
- Java 编程思想(第四版)学习笔记(3)操作符
- Java编程思想 第三章 java操作符 学习心得
- Java编程思想笔记——操作符
- Java编程思想 第4版 练习题 / 第3章 操作符 / 练习1
- Java编程思想,读书笔记二(第3、4章 操作符和控制执行流程)
- Java编程思想学习心得(五)自动递增和递减操作符的陷阱
- Java编程思想:第三章:操作符
- Java编程思想学习笔记三:操作符
- Java编程思想 第4版 练习题 / 第3章 操作符 / 练习2
- Java编程思想——操作符
- JAVA编程思想-第三章 操作符
- Java编程思想 第4版 练习题 / 第3章 操作符 / 练习3
- Java编程思想:第3章 操作符
- java编程思想笔记03-操作符
- JAVA编程思想笔记--操作符
- Java编程思想_操作符
- 【Java编程思想】三、操作符