`

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的引用。只要记得引用无大小,安全,不可计算,强转时要小心就好了。

分享到:
评论

相关推荐

    C++代码转java工具

    2. **类型映射**:理解C++和Java类型之间的差异,并进行适当的转换,如C++的int到Java的int,或者C++的指针到Java的对象引用。 3. **结构转换**:处理C++的类和对象到Java的类和对象的转换,包括构造函数、继承、...

    java中引用和c++中引用的区别.docx

    Java中的引用和C++中的引用在概念和使用上有显著的不同,这是由于两者设计哲学和语言特性的差异。首先,我们要明确一点,Java的引用更接近于C++的指针,而C++的引用则是一种完全不同的机制。 在Java中,引用可以...

    CPlus_to_Java_Converter;C++转java工具

    转换器需要将C++的指针操作转换为Java的引用操作,同时处理内存分配和释放的差异,因为Java的垃圾回收机制会自动管理内存。 2. **面向对象的差异**:C++支持多继承,而Java只允许单继承。转换器需要适当地重构多...

    c++ 转换 java c# 转换 java c++ 转换 c#

    转换时,C++的类需要映射到Java的类,指针通常会转化为Java的引用,而内存管理则从手动管理(C++的new和delete)转变为自动垃圾回收(Java的GC)。`Free Edition CPlusPlus to Java Converter.zip`可能是一个工具,...

    C++转Java工具

    例如,C++的类会被转换为Java的类,指针会映射到Java的对象引用,C++的动态内存管理会被转换为Java的垃圾回收机制。 在描述中提到的,这个工具对JNI开发很有帮助,意味着它可能能够帮助开发者更容易地将C++的本地...

    Java与C/C++的区别(转).

    ### Java与C/C++的主要区别 #### 一、指针机制 在C/C++中,指针是一个重要的特性,提供了底层内存操作的能力。这使得程序员能够直接管理内存资源,但同时也带来了潜在的安全风险,比如野指针问题或内存泄漏等。而...

    JNA 转java接口以及指针结构体解析

    在"JNA 转java接口以及指针结构体解析"这个主题中,我们将深入探讨如何使用JNA来处理C语言中的结构体和指针。 首先,理解JNA的基本工作原理至关重要。JNA通过定义一个`Interface`,该接口中的方法对应于要调用的...

    java转C++,专用工具类

    Java转C++是一种技术,主要用于将已有的Java代码转换为C++代码,以便在不支持Java虚拟机(JVM)的环境中运行或者为了利用C++的特定性能优势。本项目提供了一个专用工具类,用于自动化这个过程。下面将详细介绍这个...

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

    ### Java及C++中传值传递、引用传递和指针方式的理解 在程序设计语言中,函数调用时参数的传递方式对理解程序的行为至关重要。本文将深入探讨Java与C++这两种广泛使用的编程语言中参数传递的方式,包括值传递、引用...

    Java语言如何调用C++语言编写的本地方法

    例如,Java中的int类型对应C/C++中的int类型,Java中的对象引用对应C/C++中的指针。 10.考虑跨平台兼容性 编写本地方法时要考虑跨平台兼容性。不同操作系统上的动态链接库生成方式可能有所不同,同时还要确保平台...

    java和c++比较--虚函数和指针

    综上所述,Java和C++在虚函数和指针(或引用)的处理上有显著的不同,这些差异不仅体现在语法层面,更影响了程序设计的哲学和实践。Java通过简化多态性和内存管理,使得代码更加安全和易于维护,而C++则提供了更高的...

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

    C++中,指针和引用都可以用来实现对原始对象的修改,但它们之间存在细微差别。指针需要显式解引用,而引用则是隐式的。此外,指针可以为`NULL`,而引用必须始终引用一个有效的对象。指针还可以被重新赋值,指向其他...

    java jni c++ 类型转换

    当需要传递复杂的结构体时,如示例中的`DiskInfo`结构,通常的做法是在Java中定义一个相应的类,该类与C/C++中的结构体具有相同的字段。例如,Java中的`DiskInfo`类可能如下定义: ```java class DiskInfo { ...

    从C++转到Java需注意的地方

    在Java中,使用包装类来封装基本类型,并且没有指针的概念,而是使用引用。这意味着在Java中,不能像C++那样直接操作内存地址。 3. **多态性与接口** Java中的多态性是通过继承、接口和抽象类实现的。Java允许一个...

    面向对象编程C++和Java比较教程

    面向对象编程(Object-...总之,C++和Java虽然都是面向对象的语言,但在实现细节和应用领域上有所区别。理解和掌握这两种语言的不同特性,将有助于程序员根据项目需求选择合适的工具,并在不同语言之间无缝切换。

    JAVA与C++的区别

    Java不支持指针,而是使用引用,由垃圾回收机制自动管理内存,提高了安全性和稳定性。 - **内存管理**:C++要求程序员手动分配和释放内存,容易产生内存泄漏或悬挂指针。Java则自动进行内存管理,使用垃圾回收机制...

    《C++ for Java Programmers》高清完整英文PDF版

    书中的章节涵盖C++哲学、最简单的C++、指针和引用变量、基于对象的编程:类、运算符重载、面向对象的编程:继承、模板、异常控制流、输入和输出、集合:标准模板库、原始数组和字符串、C风格C++以及使用Java和C++:...

    java和c++语法区别

    ### Java和C++语法区别详解 #### 一、概述 本文旨在深入探讨Java与C++两种编程语言在语法层面上的主要区别与相似之处。这两种语言虽然有着不同的应用场景和发展背景,但在许多方面却也有着相似的设计理念。理解...

    C++,java互转

    例如,C++中的指针需要转换为Java的引用,C++的多态通常通过虚函数实现,而在Java中则利用接口和继承。此外,C++的模板和STL容器需要转换为Java的泛型和集合框架。 Java2Cpp是一款用于将Java代码转换为C++的工具,...

Global site tag (gtag.js) - Google Analytics