`
onedaykoo
  • 浏览: 24597 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java引用与C语言指针的区别

    博客分类:
  • J2SE
阅读更多
首先, 在Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递, 自然, 在使用对象时实际上都是使用的引用

  Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于使用早已臭名昭著的"GOTO"语句。Java放弃指针的概念绝对是极其明智的。但这只是在Java语言中没有明确的指针定义,实质上每一个new 语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个"指针",更不用象在操作C++的指针那样胆战心惊。

  基本类型数据存放在Stack中,存放的是数据。而产生对象时,只把对象的reference存放在stack中,用于指向某个对象,对象本身存放在Heap中。

  还有, 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。

  从实现上来讲,引用可以理解为一种受限的指针,引用底层可以采用指针来实现,也可以采用句柄的方式实现。早期jvm一般采用句柄的方式,现在的jvm,比如sun的,IBM的,一般就是用指针来实现。

  不过从语言的角度来将,没有必要把java的引用和C的指针来比较。

  指针是可以进行与整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。

  引用不行,只能进行赋值运算。

  当然有区别

  A a=new A();

  你可以 a=a+1;吗? 指针就可以

分享到:
评论

相关推荐

    关于C语言指针和java引用的思考.pdf

    关于C语言指针和java引用的思考.pdf

    C语言解析教程(原书第4版)(美) 凯利.pdf

    《c语言教程(原书第4版)》是一本优秀的c程序设计语言教材,完整描述了ansi c语言及其语法特性,并对c语言的高级特性和应用作了深入阐述,介绍了从c到c++和java过渡的相关知识。《c语言教程(原书第4版)》的一个...

    教你如何玩转指针

    在信息工程中,指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中的寄存器(Register)。指针一般出现在比较近机器语言的语言,如汇编语言或C语言。面向对象语言如Java一般避免用指针,而是引用。

    java学习路线.pdf

    Java的语法与C语言和C++语言很接近,这使得大多数程序员可以很容易地学习和使用它。然而,Java也丢弃了C++中一些难以理解和使用的特性,如操作符重载、多继承和自动的强制类型转换。在Java中,所有的变量都是对象,...

    linux-java64位安装包

    Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言...

    jdk8-api-中文.zip

    特别地,Java语言不使用指针,而是引用。并提供了自动的废料收集,使得程序员不必为内存管理而担忧。 Java语言是面向对象的: Java语言提供类、接口和继承等面向对象的特性,为了简单起见,只支持类之间的单继承,...

    Java学习笔记

    JAVA吸收C和C++的优点,基础语法与C语言模式完全一样,容易掌握 JAVA健壮性高,它去掉指针、内存申请和释放、无条件转移语句,但有引用的概念,实际传递的是内存地址 (大小为4字节) JAVA提供多线程、提供动态下载...

    C语言实现单链表反转

    有些语言没有指针,取而代之的是“引用”,比如 Java、Python。不管是“指针”还是“引用”,实际上,它们的意思都是一样的,都是存储所指对象的内存地址。  将某个变量赋值给指针,实际上就是将这个变量的地址赋值...

    java语言风格

    Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为...

    C++浅拷贝与深拷贝及引用计数分析

    不像Java一样,没有指针这个概念,所以也就不必担心与指针相关的一系列问题,但C++不同,从C语言沿袭下来的指针是其一大特点,我们常常要使用new/delete来动态管理内存,那么问题来了,特别是伴随着C++的继承机制,...

    开题报告-基于JAVA的俄罗斯方块游戏设计与实现.doc

    同时 Java还有一个特 点就是它的基本语法部分与C语言几乎一模一样。这样,无论是学过Java再学C,还是已 经掌握了C语言再业学Java,都会感到易于入门。 选题的依据和意义: 俄罗斯方块是一款风靡全球的电视游戏机和...

    Day 16 LinkedList、Object和Set

    5. LinkedList链表当中的操作其实大部分都是和C语言指针一个概念 2. Object 2.1 Object类概述 Java中所有类的基类 Java中所有的类都是直接或间接继承Object类 Object类的引用数据类型变量可以保存Java中任意数据...

    Java语言中链表和双向链表

    C语言和C++语言中是用指针来实现链表结构的,由于Java语言不提供指针,所以有人认为在Java语言中不能实现链表,其实不然,Java语言比C和C++更容易实现链表结构。Java语言中的对象引用实际上是一个指针(本文中的...

    C++大学教程,一本适合初学者的入门教材(part1)

    1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的...

    LinkedList,Object和Set

    LinkedList链表当中的操作其实大部分都是和C语言指针一个概念 Object类 Object类概述 Java中所有类的基类! Java中所有的类都是间接或者直接继承Object类。 Object类的引用数据类型变量可以保存Java中任意数据类型...

    第十六天

    LinkedList链表当中的操作其实大部分都是和C语言指针一个概念 2 Object类 2.1 Object类概述 Java中所有类的基类!!!  Java中所有的类都是间接或者直接继承Object类。  Object类的引用数据类型变量可以保存Java中...

    String a="hello" String b="hello" a==b 返回true的问题分析

    java里面没有指针的概念,但是实际上引用变量里面放的确实是地址值,只是java为了安全不允许我们对想c语言中的那样对指针进行操作(如++ 、--)等。这样就有效的防止了指针在内存中的游离。 而对于 String c=new ...

    C++编程思想 (作者学习C++亲身体会及多年教学经验)

    7.1.4 与C语言的区别 126 7.2 指针 127 7.2.1 指向const的指针 127 7.2.2 const指针 127 7.2.3 赋值和类型检查 128 7.3 函数参数和返回值 128 7.3.1 传递const值 128 7.3.2 返回const值 129 7.3.3 传递和返回地址 ...

    C++编程思想1-5 清晰PDF

    7.1.4 与C语言的区别 126 7.2 指针 127 7.2.1 指向const的指针 127 7.2.2 const指针 127 7.2.3 赋值和类型检查 128 7.3 函数参数和返回值 128 7.3.1 传递const值 128 7.3.2 返回const值 129 7.3.3 传递和返回地址 ...

Global site tag (gtag.js) - Google Analytics