JAVA编程思想学习笔记(三)操作符

操作符

别名问题

先来看段代码,猜猜最后输出的是什么:

class Test{
	int t;
}
public class A {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test t1 = new Test();
		Test t2 = new Test();
		t1.t=1;
		t2.t=2;
		t1=t2;
		System.out.println(t1.t+"-"+t2.t);
		t1.t=3;
		System.out.println(t1.t+"-"+t2.t);
	}

}

最后输出的是

2-2
3-3

结果可能会和你的想象不一样,这就是别名问题,因为t1,t2都是引用,开始它俩指向不同的对象,但是用t2给t1赋值的操作,就是让t1引用指向t2的对象,所以在改t1的对象的时候,实际上也是改的t2的对象。
再看下面的代码:

class Test{
	int t;
}
public class A {
	static void f(Test t){
		t.t=10;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Test t1 = new Test();
		t1.t=1;
		System.out.println(t1.t);
		f(t1);
		System.out.println(t1.t);
	}
}


这个运行结果可能也会和你想的不一样,可能会觉得只是传了个t1的副本,但是实际上是传了引用。

关系操作符

关系操作符 == 和!=同样适用于对象。但是对于第一次接触的人来说,可能会有些迷惑,下面看段程序:

class Test{
	int t;
	public Test(int a){
		t=a;
	}
}
public class A {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer t1 = new Integer(1);
		Integer t2 = new Integer(1);
		System.out.println(t1==t2);
		System.out.println(t1!=t2);
		System.out.println(t1.equals(t2));

		
		Test t3 = new Test(1);
		Test t4 = new Test(1);
		System.out.println(t3==t4);
		System.out.println(t3!=t4);
		System.out.println(t3.equals(t4));
	}

}

猜一猜输出的是什么?

false
true
true
false
true
false

造成这个结果的原因很简单,就是==比较的是引用,只有两个引用指向同一对象才会为true,但是为什么equals不一样呢?因为equals在默认情况下也是比较两个引用,是否指向同一对象,但是integer对equals方法进行了覆盖,重写了这个方法。

对于逻辑运算符,与C,C++不同,只能用于布尔值。
另外,对于逻辑运算有一点要注意,在多个逻辑表达式时,“&&”连接的,只要前面有一个false则后面的不执行,“||”连接的,只要前面有一个true则后面不执行。

猜你喜欢

转载自blog.csdn.net/qq4131533523/article/details/84146317