您的位置:首页 > 其它

学习工作笔记(2013-10-18)

2013-10-18 14:58 141 查看
《Think in java》学习笔记。

运算符-赋值

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);


注意运算时的类型转换!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: