操作符

来源:互联网 发布:unity3d棋牌游戏教程 编辑:程序博客网 时间:2024/05/20 18:44

1.赋值问题

赋值使用的操作符为“=”,它的意思是“取右边的值”,把它复制给左边。如:a=4;
但是对为对象“赋值”的时候,我们真正操作的是对对象的引用,即“将一个对象赋值给另外一个对象”,实际上是将“引用”从一个对象复制给另外一个对象。
假如c=d;那么c和d都指向原本只有d指向的那个对象。例“:
public class test1 {public static void main(String[] args) {test t1 = new test();test t2 = new test();t1.num = 10;t2.num = 20;System.out.println("t1.num:"+t1.num+","+"t2.num:"+t2.num);//println:t1.num:10,t2.num:20t1.num = t2.num;System.out.println("t1.num:"+t1.num+","+"t2.num:"+t2.num);//println:t1.num:20,t2.num:20t1.num = 30;System.out.println("t1.num:"+t1.num+","+"t2.num:"+t2.num);//println:t1.num:30,t2.num:20t1 = t2; // t1和t2指向了相同的对象System.out.println("t1.num:"+t1.num+","+"t2.num:"+t2.num);//println:t1.num:20,t2.num:20t1.num = 40;System.out.println("t1.num:"+t1.num+","+"t2.num:"+t2.num);//println:t1.num:40,t2.num:40}}class test {int num;}

2.对象的等价问题

public class test {public static void main(String[] args) {String a = "abc";//a引用的对象在常量池中String b = "abc";String c = new String("abc");//c引用的对象在堆内存中String e = new String("abc");System.out.println(a==b);//true   System.out.println(c==e);//falseSystem.out.println(a==c);//falseSystem.out.println(a.equals(b));//trueSystem.out.println(c.equals(e));//true}}
1.String a = "abc";在内存中查找abc对象,不存在,创建abc对象
2.String b = "abc",在内存中查找abc对象,存在,则指向该对象,因此a,b指向同一个对象
3.String c = new String("abc");在堆内存中创建abc对象
4.String e = new String("abc");不管堆内存是否有该对象,都创建此对象,故c,e不指向同一个对象