您的位置:首页 > 编程语言 > Java开发

[Thinking In Java]代码整理之操作符(Operators)

2013-05-24 18:55 267 查看
(Assignment)赋值操作符“=”

赋值操作符“=”是指把右边的值拷贝到左边,右边的内容可以是变量、或是会产生一个结果的表达式,但是左边的值必须是一个变量(即指必须有一个物理存储位置来存储右边的值),当然可以把一个常量赋值给一个变量。如:
a = 4 ;//合法的赋值语句
但是不能像如下赋值:
4 = a ;//错误的赋值语句
使用赋值操作符“=”是指把内容(值)从一个地方拷贝到另一个地方,比如:
a = b ;//将b中的内容拷贝到a中
此时,如果重新定义a的值,那么这个定义不会影响b的值,这在很多情况下是非常有用的。
注意:Java数据类型分为原始数据类型和对象数据类型,原始类型有 int 、boolean 、 double,对象类型即为Java类的实例。如果将一个原始数据类型赋值给另一个变量,则相当于复制一份,各自修改值互不干涉;而如果将对象类型赋值给另外一个对象,则只是复制给它对象的引用,修改该对象的值两者都会修改。下面通过代码进行进一步的说明。
1-1 对象类型赋值的例子

class Tank {
int level;
}
public class Assignment {
public static void main(String[] args) {
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 9;
t2.level = 47;
System.out.print("1: t1.level: " + t1.level +
", t2.level: " + t2.level);
t1 = t2;
System.out.print("2: t1.level: " + t1.level +
", t2.level: " + t2.level);
t1.level = 27;
System.out.print("3: t1.level: " + t1.level +
", t2.level: " + t2.level);
}
}
执行的结果如下:



以上代码的结构很简单,main()创建两个实例,分别赋予不同的值,然后将t2赋值给t1,最后改变t1的值,因为是对象的引用的赋值,所以当t1的值改变时,t2的值也会随之而改变,因为t1和t2包含指向同一对象的相同的引用。
注意:以上这种现象称为接口(aliasing),而这是Java面向对象的基础。
如果不想使用aliasing,可以使用如下语句:
t1.level = t2.level ;
当然这种方式混乱,而且于Java面向对象的设计原则背道而驰。
自增、自减操作符(Auto increment and decrement)

Java中的自增、自减操作符是指“++”、“--”,每一种又包含前缀和后缀两种形式。
++i ,先将i加1,再参与运算。

i++ ,先参与运算,再将i加1。

--i ,先将i减1,再参与运算。

i-- , 先参与运算,再将i减1。

下面通过代码进行进一步的说明。
1-2 自增、自减操作符的例子

public class AutoInc {
public static void main(String[] args) {
int i = 1;
System.out.println("i : " + i);
System.out.println("++i : " + ++i); // Pre-increment
System.out.println("i++ : " + i++); // Post-increment
System.out.println("i : " + i);
System.out.println("--i : " + --i); // Pre-decrement
System.out.println("i-- : " + i--); // Post-decrement
System.out.println("i : " + i);
}
}
运行的结果如下:



比较运算符(关系运算符)-Relational operators

比较运算符(关系运算符)包含以下几种:
<

<=

>

>=

== (等于)

!= (不等于)

比较运算符返回boolean类型的值,即返回true 或false 。
1-3 两个对象的比较

public class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}
运行的结果如下:



注意:代码1-3中“==”比较的是两个对象是否是同一个引用,显然在上述代码中通过“new”关键字创建的是两个不同的对象。
而在有的时候要比较两个对象的值(contents)是否相等,需要使用 equals() 方法,它与“==”有着本质的区别。下面通过代码进行进一步的说明。
1-4 equals() 方法比较对象的值是否相等

public class EqualsMethod {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
}
运行的结果如下:



但是equals() 方法并不是这么简单,如果创建自己的类,像下面的代码:
1-5 自己创建的类中的equals() 方法的使用

class Value {
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
}
运行的结果如下:




运行结果为“false”,这是因为equals() 方法默认的操作是比较引用,所以除非在自己的类中重写了equals() 方法,否则就像上面的代码一样,得不到的期望的结果。
:文章的代码摘自 Thinking in Java(Fourth Edition)英文版,作者 [美]Bruce Eckef,刘中兵 评注。




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 操作符