在最底层,Java中的数据是通过使用操作符来操作的。
Java是建立在C++基础之上的,所以C和C++程序员应该非常熟悉Java的大多数操作符。当然,Java也做了一些改进与简化。
3.2 使用Java操作符
操作符接受一个或者多个参数,并生成一个新值。几乎所有的操作符都只能操作“基本类型”。例外的操作符是“=”,”==”,!=”,这写操作符能操作所有的对象。除此之外,String类支持“+”,”+=”。
3.3 优先级
当一个i阿表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序。最简单的规则就是先乘除后加减。程序员经常会忘记某些优先规则,所以应该用括号明确规定计算顺序。
//: Precedence.java public class Precedenece { public static void main(String[] args) { int x = 1 , y = 2 , z = 3; int a = x + y - 2 / 2 + z; int b = x + ( y - 2 ) / ( 2 + z ); System.out.println("a = "+a+"tb = "+b); } } /* Output: * a = 5 b = 1 *///:~
3.4 赋值
赋值使用操作符“=”。它的意思是取”右值“把它复制给”左值“。
- ”右值“可以是任何常数,变量或者表达式。
- “左值”必须是一个明确的已命名的变量。
对基本数据类型的赋值是很简单的。基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到另一个地方。
但是在为对象“赋值”的时候,情况却发生了变化。“将一个对象赋值给另一个对象”,实际上是将“引用”从一个地方复制到另一个地方。这意味着假若对象使用 c=d 那么c和d都指向原本只有d指向的对象。
//: Assignment.java // Assignment with objects is a bit tricky 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 = 48; System.out.println("t1.level:"+t1.level+"tt2.level:"+t2.level); t1 = t2; System.out.println("t1.level:"+t1.level+"tt2.level:"+t2.level); t1.level = 27; System.out.println("t1.level:"+t1.level+"tt2.level:"+t2.level); } } /* Output: * t1.level:9 t2.level:48 * t1.level:48 t2.level:48 * t1.level:27 t2.level:27 *///:~
这种特殊的现象通常称作“别名现象”,是Java操作对象的一种基本方式。直接操作对象内的域可以保持连个对象彼此独立,但是容易导致混乱。并且,违背了良好的面向对象车徐设计的原则。
3.4.1 方法调用中的别名问题
//: PassObject.java // Passing objects to methods may not be what you're used to . class Letter { char c; } public class PassObject { static void f (Letter y) { y.c = 'z'; } public static void main(String[] args) { Letter x = new Letter(); x.c = 'a'; System.out.println("1.tx.c: "+x.c); f(x); System.out.println("2.tx.c: "+x.c); } } /* Output; * 1. x.c: a * 2. x.c: z *///:~
在许多编程语言中,方法参数将复制一份其传入参数的副本;但Java实际上只是传递了一个引用针对对象的操作都是引用。
3.5 算术操作符
Java的算术操作符与其他大多数程序设计语言都是相同的。同时其也使用一种来自C和C++的简化符号同时进行运算与赋值操作(x+=4)。
一元减号用于转变数据的符号,而一元加号只是为了与一元减号相对应,但是它唯一的作用仅仅是将较小类型的操作数提升为 int。
3.6 自动递增和递减
递增(++)和递减(–)运算是两中相当不错的快捷运算。这连个操作符各有两种使用方式,通常称为“前缀式”和“后缀式”。
//: AutoInc.java // Demostrates the ++ and -- operators. public class AutoInc { public static void main(String[] args) { int i = 1; System.out.println("i : "+i); System.out.println("++i : "+(++i)); System.out.println("i : "+i); System.out.println("i++ : "+(i++)); System.out.println("i : "+i); System.out.println("--i : "+(--i)); System.out.println("i : "+i); System.out.println("i-- : "+(i--)); System.out.println("i : "+i); } } /* Output: * i :1 * ++i :2 * i :2 * i++ :2 * i :3 * --i :2 * i :2 * i-- :2 * i :1 *///:~
Categories: 读书笔记
学习了。。java不错,很有潜力。
写的很全