`

java中的引用和C++中的指针的区别[转]

    博客分类:
  • java
阅读更多

转自:http://blog.sina.com.cn/s/blog_5396eb530100bred.html

 

java中的引用和C++中的指针的区别我的理解

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++的灵活,高效。

11.java中的引用只能指向对象,他的引用是在实例化对象时系统直接生成的,因此对于普通数据类型是不能进行引用定义的,如果要对普通数据类型进行函数调用时的地址传递(即java中的引用传递),必须把数据封装到类中。 java的这种特性使得在java的函数或类的参数传递时可以实现与c中指针相同的功能。

 

java中的引用和C++中的指针,他们最好不要混在一起,也不要认为是一回事,只不过他们的作用有些相似,总叫人不自觉的对比。但在我们写JAVA程序的时候最好忘记C++的指针,写C++程序的时候,也不要老惦记着JAVA的引用。只要记得引用无大小,安全,不可计算,强转时要小心就好了。

分享到:
评论

相关推荐

    java及C++中传值传递、引用传递和指针方式的理解.docx

    java及C++中传值传递、引用传递和指针方式的理解.docx

    C++ 解环引用智能指针

    4、 可以管理用new分配的内存块中的部分内存空间,即可以替代C++引用,并且保证内存正常释放,如: class A{}; class B{public: A a;}; shared_ptr<B> pb=new(ydsh,(B*)0) B; shared_ptr<A> pa=&pb->a; 5、 ...

    c++中引用和指针的区别和联系

    C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名;2. ...

    java手册中英文java8,java9手册

    继承了C++语言面向对象技术的核心,舍弃了容易引起错误的指针,以引用取代;移除了C++中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长...

    使用Java Native Interface调用本地C++代码.txt

    在这个例子中,我们使用...注意,我们在实现函数中使用了`JNIEnv *env`和`jobject obj`这两个参数,它们分别表示JNI的环境指针和当前对象的引用。这些参数可以让我们方便地在Java和C++之间传递数据和调用其他本地方法。

    java及C++中传值传递、引用传递和指针方式的理解

    为什么 Java 只有值传递,但 C++ 既有值传递,又有引用传递呢?今天我们就来探讨下这个问题,有需要的朋友可以参考下

    c++11&14-智能指针要点汇总

    但像java等其他一些语言则不会有这样的问题,为什么呢,因为它们有很好的处理内存的方法,比如java的垃圾回收机制,现在,我们c++终于也有了智能指针。 1. 什么是智能指针 简单地说,智能指针是用对象去管理一个...

    C/C++和Java达到swap不同功能

     首先我们来看下c/c++和java的差别。  本质差别  C/C++中swap功能的本质:通过传递变量地址(指针或引用)来交换变量地址中的值。  Java标榜当中对C/C++一个非常大的改进是:Java对程序猿屏蔽了变量地址的概念...

    如何使用JNA调用本地C/C++动态链接库详细示例代码

    2:基本数据类型的指针和引用 3:结构体 4:结构体的指针和引用 5:函数指针和回调函数 6:字符串指针 7:输入一个数组 8:输出一个数组并释放空间 本资源包括三个工程: C++动态链接库; VC调用本地动态链接库; ...

    JAVA中传值与引用问题

    传值和传引用的问题一直是Java里争论的话题。与C++不同的,Java里面没有指针的概念,Java的设 计者巧妙的对指针的操作进行了管理。事实上,在懂C++的Java程序员眼中,Java到处都是精美绝伦的指 针。

    java,c/c++,php,c#安全编码规范

    java,c/c++,php,c#安全编码规范,从代码层面避免被入侵 1 业务安全编码规范 6 1.1 输入验证和数据合法性校验 6 1.1.1 避免SQL注入 6 1.1.2 避免XML注入 6 1.1.3 避免跨站点脚本(XSS) 7 1.1.4 避免跨站请求伪造...

    指针和引用的区别1

    ”,这个问题我只知道java中是继承Thread类或实现Runable接口,至于在c和c++中并不了解,也就没有回答, 10.管态和目态的区别,如何切换11.数

    JAVA基础——JAVA的五种引用类型及引用队列

    ​ 众所周知,JAVA 是一种面向对象的语言,在 JAVA 程序运行时,对象是存储在堆内存(Heap)中的,C/C++ 中是通过指针来访问所谓对象(结构体)的,而 JAVA 则是通过引用来访问对象,也就是说,引用指向了对象在堆...

    java学习路线.pdf

    在Java中,所有的变量都是对象,并通过引用来访问,而不是直接通过指针。Java还提供了自动的内存分配和回收机制,这大大简化了内存管理,并降低了内存泄漏的风险。 Java是一种面向对象的编程语言,支持类和接口的...

    C++ 标准程序库.pdf

    而今C++11标准则以其人之道还治其身,吸收了Java/C#里的诸多市场成熟养分,如①基于范围for循环、②类移动构造与委托能力扩充、③类初始化方式平易化、④智能指针(垃圾回收能力)、⑤Lambda、⑥可变参数模板、⑦...

    基于Java和C++语言的安全性讨论 (2005年)

    在网络应用中发挥着重要作用的Java和C++是两种优秀的面向对象编程语言。尤其是 Java,是一种基于网络平台的语言,其安全性能就显得尤其重要。现从网络应用、语言机制、运行环境三个方面入手,全面地分析比较Java和...

    StrongDwarf#learning-notes#引用和指针的区别以及引用在高级语言中的实现2

    对于该区别,见如下代码://定义一个c引用a//定义一个指针p指向a这段代码在编译器中的解释如下:向内存中申请一个int型变量,并向其中添加值为1,此时,”a

    java web,毕业设计.zip

    Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java...

    Java基于SSM教务选课成绩管理系统设计毕业源码案例设计.zip

    Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java...

Global site tag (gtag.js) - Google Analytics