Java的引用和C++的指针有什么区别

Java的引用和C++的指针有什么区别

Java的引用和C++的指针都是指向一块内存地址的,通过引用或指针来完成对内存数据的操作。但是它们在实现、原理、作用等方面却有区别。

(1)类型:引用其值为地址的数据元素,Java封装了的地址,可以转成字符串查看,长度可以不必关心。C++指针是一个装地址的变量,长度 一般是计算机字长,可以认为是个int。
(2)所占内存:引用声明时没有实体,不占空间。C++指针如果声明后会用到 才会赋值,如果用不到不会分配内存。
(3)类型转换:引用的类型转换,也可能不成功,运行时抛异常或者编译就不能通过,C++指针只是个内存地址,指向哪里,对程序来说还都是 一个地址,但可能所指的地址不是程序想要的。
(4)初始值:引用初始值为java关键字null。C++指针是int,如不初始化指针 那它的值就不是固定的了,这很危险。
(5)计算:引用是不可以计算的。C++指针是int,它可以计算,如++或–,所 以经常用指针来代替数组下标。
(6)控制:引用不可以计算,所以它只能在自己程序中,可以被控制。C++指针是内存地址,也可以计算,所以它有可能指向了一个不属于自己程序使用的内存地址,对于其他程序来说是很危险的,对自己程序来说也是不容易被控制的。
(7)内存泄露:Java引用不会产生内存泄露。C++指针是容易产生内存泄露 的,所以程序员要小心使用,及时回收。
(8)作为参数:Java的方法参数只是传值,引用作为参数使用时,回给函数内引用的值的COPY,所以在函数内交换两个引用参数是没意义的,因为函数只交换参数的COPY值,但在函数内改变一个引用参
数的属性是有意义的,因为引用参数的COPY所引用的对象是和引用参数是同一个对象。C++指针作为参数给函数使用,实际上就是它所指的地址在被函数操作,所以函数内使用指针参数的操作都将直接作用到指针所指向的地址(变量,对象,函数等)。


总的来说,Java中的引用和C++中的指针本质上,都是想通过一个叫做引用或者指针的东西,找到要操作的目标,方便在程序中操作。所不同的是Java的办法更安全和方便一些,但没有C++的那么灵活,也算是对指针的一种包装和改进。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章