java中的引用与c++中的指针有什么区别,有什么优点?
5个回答
展开全部
1.类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。
2.所占内存: 引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。
3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,对程序来说还都是一个地址,但可能所指的地址不是程序想要的!
4.初始值:引用初始值为java关键字null。C++指针是INT,如不初始化指针,那他的值就不是固定的了。
5.计算:引用是不可以计算的。C++指针是INT,所以他可以计算,所以经常用指针来代替数组下标。
6.控制:引用不可以计算,所以他只能在自己程序里,可以被控制。C++指针是内存地址,也可以计算,所以他有可能指向了一个不归自己程序使用的内存地址,对于其他程序来说是很危险的,对自己程序来说也是不容易被控制的。
7.内存泄露:JAVA引用不会产生内存泄露。C++指针是容易产生内存泄露的,所以程序员要小心使用,及时回收。
8.作为参数:JAVA的方法参数只是传值,引用做为参数使用时候,回给函数内引用的值的COPY,所以在函数内交换两个引用参数是没意义的,因为
函数只交换的参数的COPY值,但在函数内改变一个引用参数的属性是有意义的,因为引用参数的COPY所引用的对象是和引用参数是同一个对象。
C++指针做为参数给函数使用,实际上就是他所指的地址在被函数操作,所以函数内用指针参数的操作都将直接作用到指针所指向的地址(变量,对象,函数,等
等)。
9.操作符和声明:java里用"."。C++指针用"->" 用"*"声明指针。(似乎这条没什么用!)
10.本质:java中的引用和C++中的指针本质上都是想通过一个叫做引用或者指针的东西,找到要操作的目标(变量 对象等),方便在程序里操作。所不同的是JAVA的办法更安全,方便些,但没有了C++的灵活,高效。
java中的引用和C++中的指针,他们最好不要混在一起,也不要认为是一回事,只不过他们的作用有些相似,总叫人不自觉的对比。但在我们写
JAVA程序的时候最好忘记C++的指针,写C++程序的时候,也不要老惦记着JAVA的引用。只要记得
引用无大小,安全,不可计算,强转时要小心就好了。
参考
http://blog.csdn.net/b271737818/article/details/3931913
2.所占内存: 引用声明时没有实体,不占空间。C++指针如果声明后会用到才会赋值,如果用不到不会分配内存。
3.类型转换:引用的类型转换,也可能不成功,抛异,或者IDE就不能通过。C++指针只是个内存地址,指向那里,对程序来说还都是一个地址,但可能所指的地址不是程序想要的!
4.初始值:引用初始值为java关键字null。C++指针是INT,如不初始化指针,那他的值就不是固定的了。
5.计算:引用是不可以计算的。C++指针是INT,所以他可以计算,所以经常用指针来代替数组下标。
6.控制:引用不可以计算,所以他只能在自己程序里,可以被控制。C++指针是内存地址,也可以计算,所以他有可能指向了一个不归自己程序使用的内存地址,对于其他程序来说是很危险的,对自己程序来说也是不容易被控制的。
7.内存泄露:JAVA引用不会产生内存泄露。C++指针是容易产生内存泄露的,所以程序员要小心使用,及时回收。
8.作为参数:JAVA的方法参数只是传值,引用做为参数使用时候,回给函数内引用的值的COPY,所以在函数内交换两个引用参数是没意义的,因为
函数只交换的参数的COPY值,但在函数内改变一个引用参数的属性是有意义的,因为引用参数的COPY所引用的对象是和引用参数是同一个对象。
C++指针做为参数给函数使用,实际上就是他所指的地址在被函数操作,所以函数内用指针参数的操作都将直接作用到指针所指向的地址(变量,对象,函数,等
等)。
9.操作符和声明:java里用"."。C++指针用"->" 用"*"声明指针。(似乎这条没什么用!)
10.本质:java中的引用和C++中的指针本质上都是想通过一个叫做引用或者指针的东西,找到要操作的目标(变量 对象等),方便在程序里操作。所不同的是JAVA的办法更安全,方便些,但没有了C++的灵活,高效。
java中的引用和C++中的指针,他们最好不要混在一起,也不要认为是一回事,只不过他们的作用有些相似,总叫人不自觉的对比。但在我们写
JAVA程序的时候最好忘记C++的指针,写C++程序的时候,也不要老惦记着JAVA的引用。只要记得
引用无大小,安全,不可计算,强转时要小心就好了。
参考
http://blog.csdn.net/b271737818/article/details/3931913
展开全部
java中的引用是java的一个优势也是一个弱点。引用的东西在内存释放的时候,偶尔会出现错误的。Java内存泄露的原因
1、静态集合类像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将一直被Vector等应用着。
2、内部类和外部类的引用容易出现内存泄露的问题
3、监听器的使用,java中往往会使用到监听器,在释放对象的同时没有相应删除监听器的时候也可能导致内存泄露。
4、大量临时变量的使用,没有及时将对象设置为null也可能导致内存的泄露
5、数据库的连接没有关闭情况,包括连接池方法连接数据库,如果没有关闭ResultSet等也都可能出现内存泄露的问题。
举例一个内存泄露的例子:
Vector v = new Vector(10);
for (int i = 1; i<100; i++){
Object o = new Object();
v.add(o);
o = null;
}
别以为o对象被回收了,实际上v引用了这些对象,还被引用的对象GC是没有办法回收的,这样就很可能导致内存的泄露。
而c++的指针,只是一个指向地址的内容。当然也有其自身的缺点和优点。不过这个了解的相对比较少。
1、静态集合类像HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,所有的对象Object也不能被释放,因为他们也将一直被Vector等应用着。
2、内部类和外部类的引用容易出现内存泄露的问题
3、监听器的使用,java中往往会使用到监听器,在释放对象的同时没有相应删除监听器的时候也可能导致内存泄露。
4、大量临时变量的使用,没有及时将对象设置为null也可能导致内存的泄露
5、数据库的连接没有关闭情况,包括连接池方法连接数据库,如果没有关闭ResultSet等也都可能出现内存泄露的问题。
举例一个内存泄露的例子:
Vector v = new Vector(10);
for (int i = 1; i<100; i++){
Object o = new Object();
v.add(o);
o = null;
}
别以为o对象被回收了,实际上v引用了这些对象,还被引用的对象GC是没有办法回收的,这样就很可能导致内存的泄露。
而c++的指针,只是一个指向地址的内容。当然也有其自身的缺点和优点。不过这个了解的相对比较少。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C++指针直接指向地址,指针是C++的特有功能
引用是别名,便于操作。不像指针那样复杂。
引用是别名,便于操作。不像指针那样复杂。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
引用和指针两码事啊。。。
指针直接指到内存地址去了。
引用就是个别名。
各有优点。指针操作灵活,但是搞不好崩溃神马的常有。
引用基本上不会用错。但是别名也没啥太牛叉的功能。。。
指针直接指到内存地址去了。
引用就是个别名。
各有优点。指针操作灵活,但是搞不好崩溃神马的常有。
引用基本上不会用错。但是别名也没啥太牛叉的功能。。。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你要知道java属于面向对象的语言,而c++属于面向底层的语言,两者面向的对象不同导致两者在语言上有区别。
其实对于本质上来说,引用与指针都是指向内存中存储地址的即真实的物理空间,两者在底层里面都是相同的。但是因为java是面向对象的语言所以你在使用引用的时候无需知道它的存储与转存过程,你只要使用引用的名字就可以了,而c++中的指针则需要你关注实际内存的情况,不能光是引用。极端一点来说,java里面引用是一对一,除非你再次定义,而c++属于一对多,一个指针可以指向任意多个地址。
其实对于本质上来说,引用与指针都是指向内存中存储地址的即真实的物理空间,两者在底层里面都是相同的。但是因为java是面向对象的语言所以你在使用引用的时候无需知道它的存储与转存过程,你只要使用引用的名字就可以了,而c++中的指针则需要你关注实际内存的情况,不能光是引用。极端一点来说,java里面引用是一对一,除非你再次定义,而c++属于一对多,一个指针可以指向任意多个地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询