学习工作笔记(2013-10-18)
2013-10-18 14:58
141 查看
《Think in java》学习笔记。
运算符-赋值
java的赋值运算符是等号(=)。等号的左边必须是一个已经声明的变量(java程序的一个基本存储单元),而右边可以是常数、变量、表达式等。
例如: int a = 0;
它的意思是把等号右边的值复制到左边,所以说左边必须有一个物理性的空间来保存右边的值。
对基本类型的赋值是比较直接的,因为基本类型存储的是实际的值,而非对象的句柄,所以在为其赋值的时候是将来自一个地方的值直接复制到另一个地方。一个例子:int A = B;
就是把B的内容复制到A,而之后如果我们改变了A的值,B是不会有任何改变的!
为对象赋值与上述不同。对象赋值时,我们操作的其实是对象的句柄,也就是说将句柄从一个地方复制到另一个地方。例如:
从上例的输出结果可以看出为对象赋值p2 = p1,则p1,p2都是指向p1最初所指向的对象,而在赋值过程中p2所持有的句柄已经丢失,它所指向的最初对象会由垃圾回收器清楚。
同时,这种p2 = p1,使p1,p2指向同一个对象的现象也叫做“别名”(p1与p2互为别名)。在将一个对象传递到方法内部时也会产生别名现象,如下例所示:
实际上Alisas()方法传递的参数也是对象的句柄(也可以说是引用),调用它改变的是它之外的对象。pt与p1也可以看成互为别名。
运算符-算术运算符
java的算数运算符有+、-、*、/、%、++、--。而他们又可以分为一元运算符(一个操作数)和二元运算符(两个操作数)。
一元运算符有——正(+)、负(-)、自增(++)、自减(--),例如:
由此可以看出其中+j得到j的原值,-k号得到操作数的负值,++j先执行运算(+1)再生成值,k--先生成值在执行运算(-1)。虽然书上说++j相当于j = j + 1,但是我感觉某些情况下不
是,比如在涉及类型转换的计算中:short a;++a;a = a + 1;第二个计算必须进行类型转换,而第一个计算则不用!
二元运算符有——加(+)、减(-)、*、/、取模(%)。例如:
注意运算时的类型转换!
运算符-赋值
java的赋值运算符是等号(=)。等号的左边必须是一个已经声明的变量(java程序的一个基本存储单元),而右边可以是常数、变量、表达式等。
例如: int a = 0;
它的意思是把等号右边的值复制到左边,所以说左边必须有一个物理性的空间来保存右边的值。
对基本类型的赋值是比较直接的,因为基本类型存储的是实际的值,而非对象的句柄,所以在为其赋值的时候是将来自一个地方的值直接复制到另一个地方。一个例子:int A = B;
就是把B的内容复制到A,而之后如果我们改变了A的值,B是不会有任何改变的!
为对象赋值与上述不同。对象赋值时,我们操作的其实是对象的句柄,也就是说将句柄从一个地方复制到另一个地方。例如:
class Person { int age; } public class Demo { public static void main(String[] args) { Person p1 = new Person(); Person p2 = new Person(); p1.age = 23; p2.age = 24; System.out.println("before--p1.age=" + p1.age + "--p2.age=" + p2.age); p2 = p1; System.out.println("process--p1.age=" + p1.age + "--p2.age=" + p2.age); p2.age = 25; System.out.println("after--p1.age=" + p1.age + "--p2.age=" + p2.age); } }
从上例的输出结果可以看出为对象赋值p2 = p1,则p1,p2都是指向p1最初所指向的对象,而在赋值过程中p2所持有的句柄已经丢失,它所指向的最初对象会由垃圾回收器清楚。
同时,这种p2 = p1,使p1,p2指向同一个对象的现象也叫做“别名”(p1与p2互为别名)。在将一个对象传递到方法内部时也会产生别名现象,如下例所示:
private static void Alisas(Person pt) { pt.age = 26; } public static void main(String[] args) { Person p1 = new Person(); p1.age = 23; System.out.println("before--p1.age=" + p1.age); Alisas(p1); System.out.println("after--p1.age=" + p1.age); }
实际上Alisas()方法传递的参数也是对象的句柄(也可以说是引用),调用它改变的是它之外的对象。pt与p1也可以看成互为别名。
运算符-算术运算符
java的算数运算符有+、-、*、/、%、++、--。而他们又可以分为一元运算符(一个操作数)和二元运算符(两个操作数)。
一元运算符有——正(+)、负(-)、自增(++)、自减(--),例如:
int i, j, k; Random rd = new Random(); j = rd.nextInt(); k = rd.nextInt(); System.out.println("j=" + j + "#######k=" + k); i = +j; System.out.println("i=" + i); i = -k; System.out.println("i=" + i); i = ++j; System.out.println("i=" + i + "######j=" + j); i = k--; System.out.println("i=" + i + "######k=" + k);
由此可以看出其中+j得到j的原值,-k号得到操作数的负值,++j先执行运算(+1)再生成值,k--先生成值在执行运算(-1)。虽然书上说++j相当于j = j + 1,但是我感觉某些情况下不
是,比如在涉及类型转换的计算中:short a;++a;a = a + 1;第二个计算必须进行类型转换,而第一个计算则不用!
二元运算符有——加(+)、减(-)、*、/、取模(%)。例如:
i = j + k; System.out.println("i=" + i); i = j - k; System.out.println("i=" + i); i = j * k; System.out.println("i=" + i); i = j / k; System.out.println("i=" + i); i = j % k; System.out.println("i=" + i);
注意运算时的类型转换!
相关文章推荐
- Oracle编程艺术学习笔记 - 准备工作
- Hadoop学习笔记(六):Hadoop读写文件时内部工作机制
- Hadoop学习笔记(一):MapReduce工作机制
- SAP在物流工作中的应用之学习笔记
- Android工作学习笔记之图片自适应imageview属性android:scaleType
- Nginx学习笔记(十六):worker进程的循环工作
- AD学习笔记7——活动目录的安装准备工作
- Verilog学习笔记11:一个完整的工作流程
- 学习笔记 2_Cocos Creator_资源工作流程
- WF实例学习笔记:(1)准备工作
- 这些年的工作的学习笔记
- Hadoop学习笔记一:MapReduce的工作机制
- Linux操作学习笔记------Linux安装前的工作。
- 2009年10月19日工作,学习笔记
- 《代码大全》学习笔记 可以工作的类
- 2440,学习笔记之ARM 处理器工作模式
- Android深度探索:HAL与驱动开发学习笔记--工作队列
- Weex学习笔记第一篇:准备工作和要了解的知识点
- 工作学习笔记2017-04-19
- 【deep learning学习笔记】注释yusugomori的SDA代码 -- 准备工作