一般开始接触代码世界,很多人都是从C或C++开始的。C和C++像文言文一样,性能好效率高,全面又古老,前人辈出,但是指针等特性又让人觉得强大、直接但是难把握。这种特点延伸到了OC等其他衍生语言上。
而Java消除了指针的概念,在参数传递方面尤其有着对应现实世界的哲思。Java是值传递的,这点和C家族完全不同。
当你在现实世界中,用现实的事物,在你的头脑中计算,赋值的过程往往和Java的值传递思想是一致的,从这点上来说Java更加“真实”。
门口的柿子树有2米高,按样子明年能长到3米高,于是你知道,柿子树从2米变成了3米。当然了,只是你脑子这么想了一下(赋值和计算),这个过程体现了你有一定的计算、预测能力,而并不是你一思考,柿子树立即跟着你的思维长到了3米高。
用Java的“话”来说,你是复制了一份柿子树的高度放在你脑子里,给其加上了另一个高度,你计算出了一个结果。但是柿子树它还在那里,安静地看着你。
C家族就不同了,那是一片void的虚空,魔幻的世界,就像吃了红伞伞,你无所不能,为所欲为,思维的指针所到之处,寸草不生,强大的人越强大,糊涂的人越糊涂。
其实Java并不是没有指针,就像一把粗粝的刀,给它裹上了兽皮,不那么剌手。但是层层包装之后,加上思前顾后想兼顾的东西太多,效率比起C来确实下降了些。
public class TestObj {
int x;
int y;
public void swap_int(int x,int y) {
x = x+y;
y = x-y;
x = x-y;
}
}
public class Main {
public static void main(String args[]) {
System.out.println("Launch succeeded!");
//测试传值-开始
int a = 1, b = 2;
func_swap_int(a,b); //内容拷贝
System.out.println("Step1: "+"a = "+a+" "+"b = "+b);
TestObj o1 = new TestObj();
TestObj o2 = new TestObj();
o1.x = 10;
o2.x = 20;
int temp = o1.x; //指针拷贝
o1.x = o2.x;
o2.x = temp;
System.out.println("Step2: "+"o1.x = "+o1.x+" "+"o2.x = "+o2.x);
o1.y=30;
o1.swap_int(o1.x, o1.y); //内容拷贝
System.out.println("Step3: "+"o1.x = "+o1.x+" "+"o1.y = "+o1.y);
int temp2 = o1.x; //指针拷贝
o1.x = o1.y;
o1.y = temp2;
System.out.println("Step4: "+"o1.x = "+o1.x+" "+"o1.y = "+o1.y);
o1.x = o1.x+o1.y; //指针拷贝
o1.y = o1.x-o1.y;
o1.x = o1.x-o1.y;
System.out.println("Step5: "+"o1.x = "+o1.x+" "+"o1.y = "+o1.y);
}
//测试传值-结束
public static void func_swap_int(int x,int y) {
x = x+y;
y = x-y;
x = x-y;
}
}
耍好了。



