java引用与指针的区别_Java引用与C指针的区别

这篇博客探讨了Java引用与C指针的不同之处。Java中不存在指针的概念,但其实质上每个new操作返回的都是对象引用。引用不能进行指针运算,如加减,而C指针则可以。文章指出,Java放弃指针是为了提高代码安全性和易读性。此外,还介绍了Java内存管理中栈和堆的区别。引用在底层可能是通过指针或句柄实现,但语言层面并不直接支持指针操作。
摘要由CSDN通过智能技术生成

Java引用与C指针的区别

2009-11-02

eNet&Ciweek

首先, 在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;吗? 指针就可以

c3e667f7e5ce5e17d471e602488fef4e.png

您对本文或本站有任何意见,请在下方提交,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JAVA引用指针区别在于,JAVA引用是一个对象的句柄,它指向一个对象的地址,而指针是一个变量,它存储一个地址,可以指向任何类型的数据。JAVA引用是类型安全的,可以避免指针的一些问题,如空指针引用和野指针等。此外,JAVA引用还可以进行自动垃圾回收,避免内存泄漏的问题。 ### 回答2: Java中的引用指针虽然在表面上看起来相似,但实际上有着本质上的区别。 首先,Java中的引用是由虚拟机自动管理的,无需手动分配和释放内存。而指针则需要程序员手动管理内存,包括分配和释放。这是由于Java中使用了垃圾回收机制,通过追踪对象的引用关系来决定内存的分配和释放,使得程序员可以更加专注于业务逻辑的编写。 其次,Java引用提供了更高层次的抽象,隐藏了底层的内存细节。这意味着Java程序员只需关注对象本身而不需要关心内存的具体分配与释放。而指针则需要程序员自行处理内存的细节,容易出现内存泄漏和悬挂指针等问题。 另外,Java中的引用可以为空,即可以指向null值,代表没有指向任何对象。而指针则必须指向有效的内存地址,不允许为空。 最后,Java中的引用具有动态类型的特性,可以在运行时改变指向的对象类型,使得程序更加灵活。而指针则是静态类型,一旦指向一个对象类型,就不能改变。 综上所述,Java中的引用指针在内存管理、抽象程度、空值处理和类型特性等方面存在着明显的区别。这些区别使得Java成为一种更加安全和易用的编程语言,相较于使用指针的语言更容易开发和维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值