1、Java操作符易混淆点你解决了么? 发布时间: 2011-6-28 10:00 作者: 未知 来源: 51Testing软件测试网采编 今天开始重新温习Java,翻了翻java编程思想,看到操作符那里有一些考试面试经常遇到的又容易出错的地方,在这记录一下。 1. 赋值操作:在对一个对象进行赋值操作时,我们所操作的是对对象的引用。比如使用c=d,将对象d赋给对象c,这时c所指向的正式d之前所指向的内存,这时如果改变c或者d其中任何一个的值,另外一个的值也会变。 下面举个例子说明: Java代码 1. class A{ 2. int a;
2、 3. } 4. 5. public class Test{ 6. public static void main(String[] args){ 7. A c = new A(); 8. A d = new A(); 9. c.a = 10; 10. d.a = 15; 11. 12. c = d; 13. System.out.println("c.a =
3、" + c.a + ", d.a = " + d.a); 14. d.a = 20; 15. System.out.println("c.a = " + c.a + ", d.a = " + d.a); 16. } 17. } 输出结果为: c.a = 15, d.a = 15 c.a = 20, d.a = 20 可见当d的值改变时,c的值也会跟着改变,这说明这两个对象指向同一块儿内存。 2. 方法调用中的别名问题,比如将对象a作为参数传递给函数f,并在函数f中对对象a进行修
4、改,那么实际修改的是a对象本身,因为传递给f的是a的一个引用,它和a指向的是同一块内存。 Java代码 1. class A{ 2. int item; 3. } 4. 5. public class Test{ 6. public static void main(String[] args){ 7. A a = new A(); 8. a.item = 10; 9. f(a); 10. Syste
5、m.out.println("a.item = " + a.item); 11. } 12. static void f(A obj){ 13. obj.item = 20; 14. } 15. } 输出结果为: a.item = 20 3. equals 和 == ==就是用来比较对象的引用,也就是说它只在乎两个对象是不是指向同一块内存,如果是的话,就返回true,否则即使两个对象的值相等,它也返回false equals()的默认行为也是比较引用,但是它在jdk的许
6、多类中都被覆盖过了(这些类有java.io.file,java.util.Date,java.lang.string,包装类(Integer,Double等)),覆盖后的结果为,只要两个对象的类型一致、值一致,就返回true,否则返回false。 举个例子: Java代码 1. class A{ 2. int item; 3. } 4. 5. public class Test{ 6. public static void main(String[] args){ 7. A a
7、 = new A(); 8. a.item = 10; 9. A b = new A(); 10. b.item = 10; 11. 12. f(a, b); 13. 14. a = b; 15. f(a, b); 16. 17. String s1 = new String("test"); 18. String s2
8、 = new String("test"); 19. if(s1 == s2) 20. System.out.println("s1 == s2"); 21. else if(s1.equals(s2)) 22. System.out.println("s1 equals s2"); 23. } 24. 25. static void f(A a, A b){ 26. if(a == b)
9、 27. System.out.println("a == b"); 28. else 29. System.out.println("a != b"); 30. 31. if(a.equals(b)) 32. System.out.println("a equals b"); 33. else 34. System.out.println("a is not equals b"); 35. } 36. } 输出结果为: a != b a is not equals b a == b a equals b s1 equals s2 这充分说明了 == 和 equals都是比较对象的引用的,s1 equals s2说明了在String类里覆盖了equals方法,只要两个对象值一样,就返回true。 转载地址:






