操作符笔记

来源:互联网 发布:播放器源码 编辑:程序博客网 时间:2024/06/18 18:08
 

操作符笔记-第一天




在最底层,Java中的数据是通过使用操作符来操作的。

Java是建立在C++基础之上的,所以C和C++程序员应该非常熟悉Java的大多数操作符。当然,Java也做了一些改进与简化。

3.2 使用Java操作符

操作符接受一个或者多个参数,并生成一个新值。几乎所有的操作符都只能操作“基本类型”。例外的操作符是“=”,”==”,!=”,这写操作符能操作所有的对象。除此之外,String类支持“+”,”+=”。

3.3 优先级

当一个i阿表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序。最简单的规则就是先乘除后加减。程序员经常会忘记某些优先规则,所以应该用括号明确规定计算顺序。



Java代码
  1. //: Precedence.java
  2. public class Precedenece {
  3.     public static void main(String[] args) {
  4.         int x = 1 , y = 2 , z = 3;
  5.         int a = x + y - 2 / 2 + z;
  6.         int b = x + ( y - 2 ) / ( 2 + z );
  7.         System.out.println("a = "+a+"\tb = "+b);
  8.     }
  9. }
  10. /* Output:
  11. * a = 5    b = 1
  12. *///:~  
复制代码
3.4 赋值

赋值使用操作符“=”。它的意思是取”右值“把它复制给”左值“。

1.”右值“可以是任何常数,变量或者表达式。
2.“左值”必须是一个明确的已命名的变量。
对基本数据类型的赋值是很简单的。基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到另一个地方。

但是在为对象“赋值”的时候,情况却发生了变化。“将一个对象赋值给另一个对象”,实际上是将“引用”从一个地方复制到另一个地方。这意味着假若对象使用 c=d 那么c和d都指向原本只有d指向的对象。

Java代码
  1. //: Assignment.java
  2. // Assignment with objects is a bit tricky

  3. class Tank {
  4.     int level;
  5. }

  6. public class Assignment {
  7.     public static void main(String[] args) {
  8.         Tank t1 = new Tank();
  9.         Tank t2 = new Tank();
  10.         t1.level = 9;
  11.         t2.level = 48;
  12.         System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
  13.         t1 = t2;
  14.         System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
  15.         t1.level = 27;
  16.         System.out.println("t1.level:"+t1.level+"\tt2.level:"+t2.level);
  17.     }
  18. }
  19. /* Output:
  20. * t1.level:9   t2.level:48
  21. * t1.level:48  t2.level:48
  22. * t1.level:27  t2.level:27
  23. *///:~
复制代码
这种特殊的现象通常称作“别名现象”,是Java操作对象的一种基本方式。直接操作对象内的域可以保持连个对象彼此独立,但是容易导致混乱。并且,违背了良好的面向对象车徐设计的原则。

3.4.1 方法调用中的别名问题



Java代码
  1. //: PassObject.java
  2. // Passing objects to methods may not be what you're used to .

  3. class Letter {
  4.     char c;
  5. }

  6. public class PassObject {
  7.     static void f (Letter y) {
  8.         y.c = 'z';
  9.     }
  10.     public static void main(String[] args) {
  11.         Letter x = new Letter();
  12.         x.c = 'a';
  13.         System.out.println("1.\tx.c: "+x.c);
  14.         f(x);
  15.         System.out.println("2.\tx.c: "+x.c);
  16.     }
  17. }
  18. /* Output;
  19. * 1.   x.c: a
  20. * 2.   x.c: z
  21. *///:~
复制代码
在许多编程语言中,方法参数将复制一份其传入参数的副本;但Java实际上只是传递了一个引用针对对象的操作都是引用。

3.5 算术操作符

Java的算术操作符与其他大多数程序设计语言都是相同的。同时其也使用一种来自C和C++的简化符号同时进行运算与赋值操作(x+=4)。

一元减号用于转变数据的符号,而一元加号只是为了与一元减号相对应,但是它唯一的作用仅仅是将较小类型的操作数提升为 int。

3.6 自动递增和递减

递增(++)和递减(–)运算是两中相当不错的快捷运算。这连个操作符各有两种使用方式,通常称为“前缀式”和“后缀式”。“前缀式“会先执行运算,再生成值;”后缀式“会先生成值,再执行运算。

Java代码
  1.   
  2. 1.//: AutoInc.java   
  3. 2.// Demostrates the ++ and -- operators.   
  4. 3.   
  5. 4.public class AutoInc {   
  6. 5.    public static void main(String[] args) {   
  7. 6.        int i = 1;   
  8. 7.        System.out.println("i   : "+i);   
  9. 8.        System.out.println("++i : "+(++i));   
  10. 9.        System.out.println("i   : "+i);   
  11. 10.        System.out.println("i++ : "+(i++));   
  12. 11.        System.out.println("i   : "+i);   
  13. 12.        System.out.println("--i : "+(--i));   
  14. 13.        System.out.println("i   : "+i);   
  15. 14.        System.out.println("i-- : "+(i--));   
  16. 15.        System.out.println("i   : "+i);   
  17. 16.    }   
  18. 17.}   
  19. 18./* Output:  
  20. 19. * i   :1  
  21. 20. * ++i :2  
  22. 21. * i   :2  
  23. 22. * i++ :2  
  24. 23. * i   :3  
  25. 24. * --i :2  
  26. 25. * i   :2  
  27. 26. * i-- :2  
  28. 27. * i   :1  
  29. 28. *///:~  
复制代码