码迷,mamicode.com
首页 > 编程语言 > 详细

java的引用与c的指针之间的区别

时间:2015-06-20 23:30:32      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

相信大部分初学java的人都会有的疑惑,引用与指针究竟有什么区别呢?

先来看一个 c语言中的交换函数

 1 #include "stdio.h"
 2 void swap(int *a,int *b)
 3 {
 4     int temp=*a;
 5      *a=*b;
 6     *b=temp;
 7 }
 8 main()
 9 {
10     int a=1,b=2;
11     swap(&a,&b);
12     printf("%d %d",a,b);
13 }


很简单  只要用指针传一个地址进去  但java中没有指针 怎么办?

只能创建对象实现 或者 借助数组  没有指针来的这么方便

 1 public class Swaptest {
 2     
 3     public int a;
 4     public int b;
 5 
 6     public static void main(String[] args) {
 7         
 8         Swaptest s =new Swaptest();
 9         s.a=1;
10         s.b=2;
11         Change(s);
12         System.out.println(s.a+" "+s.b);
13     }
14     public static void Change(Swaptest i){
15         int temp=i.a;
16         i.a=i.b;
17         i.b=temp;
18     }
19 }

看到这里 也许有人会说 Integer 不也是引用类型吗 为什么不能直接用它来传  我们可以看一下

 1 public class Swaptest {
 2     
 3 
 4     public static void main(String[] args) {
 5         
 6 
 7         Integer a=1,b=2;
 8         Change(a,b);
 9         System.out.println(a+" "+b);
10     }
11     public static void Change(Integer a,Integer b){
12         Integer temp=a;
13         a=b;
14         b=temp;
15     }
16 }

输出结果还是 1 2

这是为什么呢?

我们再来看一个例子 

 1 public class Swaptest {
 2     
 3 
 4     public static void main(String[] args) {
 5         
 6 
 7         Integer a=1,b;
 8         b=a;
 9         b=2;
10 
11         System.out.println(a+" "+b);
12         System.out.println(a==b);
13     }
14 
15 }


你们可以猜一下输出结果是什么

结果是

1 2
false

为什么?

因为Integer是封装类的  是不可变的

当b赋值为2的时候  并不是去修改b所指的地址里的值  而是 新建一个空间 存为2 并让b指向它

技术分享

  

 那么引用比指针好在哪里呢?   

 使程序更加安全  java给你规定好了哪里能用 哪里不能用

 但是受束缚  没指针这么灵活

java的引用与c的指针之间的区别

标签:

原文地址:http://www.cnblogs.com/threezj/p/4591172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!