JAVA编程思想笔记--操作符
2017-06-09 10:43
169 查看
赋值:基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。
在为对象”赋值”的时候,情况却发生了变化,对另一个对象进行操作时,我们真正操作的是对对象的引用,将一个对象赋值给另一个对象,实际是将引用从一个地方复制到另一个地方。
== 和 !=比较的是就是对象的引用。尽管对象的内容相同,然而对象的引用却是不同。
equals()的默认行为是比较引用。
“与”,“或”,“非”操作只可应用于布尔值。
如果在应该使用String值的地方使用了布尔值,布尔值会自动转换成适当的文本形式。
print((i< j));
当使用逻辑操作符时,会遇到一种“短路”现象,即一旦能够明确无误地确定整个表达式的值,就不再计算表达式余下部分。因此,整个逻辑表达式靠后的部分可能不会被运算。test1(0)&&test2(2)&&test3(3),test1(0)为true,test2(2)为false时,余下部分不会执行。
三元操作符if-else: 三元操作符也称条件操作符,有三个操作数。属于操作符的一种,因为它最终也会生成一个值,与普通的if-else语句是不同的。
字符串操作符+和+= : 连接不同字符串,如果表达式以一个字符串起头,那么后续所有操作数都必须是字符串型。
类型转换操作符:假如我们为浮点变量赋以一个整数值,编译器会将int自动转换成float。类型转换:
窄化转换操作(也就是说,将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型),就有可能面临信息丢失的危险。
在进行窄化转换时,必须注意截尾与舍入问题
输出: int(above) : 0 ; int(below) : 0 ; int(fabove) :0 ; int(fbelow) : 0 ;因此答案是在将float或double转型为整型值时,总是对该数字执行截尾。
如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
提升:如果对基本数据类型执行算术运算或按位运算,会发现,只要类型比int小(即char,byte或short,那么在运算之前,这些值会自动转换成int。这样一来最终生成的结果就是int类型。
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型,如果将一个float值与一个double值相乘,结果是double;如果将一个int和一个long值相加,则结果为long。
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型,如果将一个float值与一个double值相乘,结果就是double;
在为对象”赋值”的时候,情况却发生了变化,对另一个对象进行操作时,我们真正操作的是对对象的引用,将一个对象赋值给另一个对象,实际是将引用从一个地方复制到另一个地方。
public class ArrayMaker { //电视与遥控器的关系 public static void main(String[] args) { Tank t1 = new Tank(); Tank t2 = new Tank(); t1.level = 9 ; t2.level = 47 ; t1 = t2 ; t2.level = 3 ; System.out.println(t1.level); //3 t1.level = 4 ; System.out.println(t2.level); //4 } } //由于赋值操作的是一个对象的引用,所以修改t1的同时也改变了t2.这是由于t1和t2包含的是相同的引用,它们指向相同的对象。 //这种特殊的现象通常称作"别名现象",是Java操作对象的一种基本方式。 //避免别名问题:t1.level = t2.level;
== 和 !=比较的是就是对象的引用。尽管对象的内容相同,然而对象的引用却是不同。
equals()的默认行为是比较引用。
class Value{ int i ; } public class EqualsMethods { public static void main(String[] args) { Value v1 = new Value(); Value v2 = new Value(); v1.i = v2.i = 100; //equals比较的默认行为是比较引用 System.out.println(v1.equals(v2)); } } /* Output: false */
“与”,“或”,“非”操作只可应用于布尔值。
如果在应该使用String值的地方使用了布尔值,布尔值会自动转换成适当的文本形式。
print((i< j));
当使用逻辑操作符时,会遇到一种“短路”现象,即一旦能够明确无误地确定整个表达式的值,就不再计算表达式余下部分。因此,整个逻辑表达式靠后的部分可能不会被运算。test1(0)&&test2(2)&&test3(3),test1(0)为true,test2(2)为false时,余下部分不会执行。
三元操作符if-else: 三元操作符也称条件操作符,有三个操作数。属于操作符的一种,因为它最终也会生成一个值,与普通的if-else语句是不同的。
boolean-exp ? value0:value1如果boolean-exp(表达式)的结果为true,就计算value0,而且这个计算结果也就是操作符最终产生的值。
字符串操作符+和+= : 连接不同字符串,如果表达式以一个字符串起头,那么后续所有操作数都必须是字符串型。
int x =0 ,y = 1 ,z = 2 ;String s ="x,y,z"; print(s+x+y+z); Output:x,y,z012
类型转换操作符:假如我们为浮点变量赋以一个整数值,编译器会将int自动转换成float。类型转换:
int i = 200; long lng = (long)i ;
窄化转换操作(也就是说,将能容纳更多信息的数据类型转换成无法容纳那么多信息的类型),就有可能面临信息丢失的危险。
在进行窄化转换时,必须注意截尾与舍入问题
public class CastingNumbers{ public static void main(String[] args){ double above = 0.7 ,below = 0.4 ; float fabove = 0.7f, fbelow = 0.4f ; } }
输出: int(above) : 0 ; int(below) : 0 ; int(fabove) :0 ; int(fbelow) : 0 ;因此答案是在将float或double转型为整型值时,总是对该数字执行截尾。
如果想要得到舍入的结果,就需要使用java.lang.Math中的round()方法。
public class ArrayMaker { public static void main(String[] args) { double above = 0.7 ,below = 0.4 ; float fabove = 0.7f, fbelow = 0.4f ; System.out.println(Math.round(above)); //1 System.out.println(Math.round(below)); //0 System.out.println(Math.round(fabove));//1 System.out.println(Math.round(fbelow));//0 } }
提升:如果对基本数据类型执行算术运算或按位运算,会发现,只要类型比int小(即char,byte或short,那么在运算之前,这些值会自动转换成int。这样一来最终生成的结果就是int类型。
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型,如果将一个float值与一个double值相乘,结果是double;如果将一个int和一个long值相加,则结果为long。
表达式中出现的最大的数据类型决定了表达式最终结果的数据类型,如果将一个float值与一个double值相乘,结果就是double;
相关文章推荐
- Java 编程思想(第四版)学习笔记(3)操作符
- Java编程思想笔记——操作符
- Java编程思想学习笔记三:操作符
- 【java编程思想笔记】第三章—操作符
- [Java编程思想-学习笔记]第3章 操作符
- java 编程思想的学习笔记 - 第三章 操作符 第四章 控制执行
- java编程思想-----笔记(二)____操作符+流程控制
- 《Java 编程思想》-第3章 操作符 笔记
- java编程思想笔记03-操作符
- java编程思想阅读笔记(十)I/O系统(上)
- Java编程思想 第4版 练习题 / 第3章 操作符 / 练习2
- Java 编程思想(第四版)学习笔记(8)多态
- java编程思想阅读笔记(六)异常处理
- Java 编程思想(第四版)学习笔记(7)复用类
- java编程思想阅读笔记(二)访问权限控制和复用类
- java 编程思想笔记之多态
- Java 编程思想(第四版)学习笔记(5)初始化与清理
- (27)21.3.1 不正确的访问资源---Java编程思想之并发笔记
- Java编程思想 第四版 第二章 一切都是对象 笔记 思维导图
- java编程思想学习笔记(一)