NashZhou

广告算法工程师,目前致力于关键词广告的效果自动优化

浅谈Java引用

代码
1 package data;
2
3  public class Yingyong implements Cloneable{
4
5 static class Data{
6 public int x;
7 public Data(int x){
8 this.x=x;
9 }
10 @Override
11 public Object clone() throws CloneNotSupportedException{
12 return (Data)super.clone();
13 }
14 }
15 /**
16 * @param args Java最特别的地方是它把指针给赶走了,找来了引用来代替指针
17 * 那么什么时候会用到引用呢
18 */
19 public static void main(String[] args) {
20 //fun1();
21 //fun2();
22 //fun3();
23 //fun4();
24 //fun5();
25 /*
26 * 总结:
27 * Java里没有了指针,全部使用引用,而且这种引用是强制性的,规定的。
28 * 也就是说Java语法规定引用的地方就引用,它不管程序员此时需不需要引用
29 */
30 }
31 /*
32 * 可以肯定的是像 int char boolan float double 等在
33 *复制时是不存在引用的。那么当你把一个基本数据类型传递到一个方法中
34 *并在方法中对该数据进行修改,那么不幸的是,你将会碰到一个在C语言里经常碰到的问题
35 *回到调用方法里后,发现该数据没有发生任何改变。那么我们该怎么解决。
36 *1:转换成数组,因为数组在Java中是支持引用调用的 详见fun3()
37 *2:包装成对象,Java是一种纯面向对象语言,什么都得做成对象。 详见fun4()
38 */
39 public static void fun1(){
40 boolean a=true;
41 boolean b=a;
42 a=false;
43 System.out.println("a:"+a);
44 System.out.println("b:"+b);
45 }
46 /*
47 * 考虑字符串Sting
48 * 使用String a=new String("FREEZE"); 实例化,发现支持引用
49 */
50 public static void fun2(){
51 String a=new String("Freeze");
52 String b=new String("FREEZE");
53 b=b.toLowerCase();
54 System.out.println("a:"+a);
55 System.out.println("b:"+b);
56 }
57 /*
58 * 我们知道在C中数组是通过传递地址进行调用的
59 * 而在Java中用的就是引用
60 */
61 public static void fun3(){
62 int []a={1};
63 int []b=a;
64 a[0]=2;
65 System.out.println("a:"+a[0]);
66 System.out.println("b:"+b[0]);
67 }
68 /*
69 * 对象的引用
70 */
71 public static void fun4(){
72 Data a=new Data(1);
73 Data b=a;
74 b.x=2;
75 System.out.println("a:"+a.x);
76 System.out.println("b:"+b.x);
77 }
78 /*
79 * 对象的克隆
80 */
81 public static void fun5(){
82 Data a=new Data(1);
83 Data b=new Data(1);
84 try{
85 b=(Data)a.clone();
86 }catch(CloneNotSupportedException e){
87 System.out.println("克隆失败!");
88 }
89 a.x=2;
90 System.out.println("a:"+a.x);
91 System.out.println("b:"+b.x);
92 }
93 }
94

posted on 2010-06-04 17:13  NashZhou  阅读(217)  评论(0编辑  收藏  举报

导航