java引用、C指针以及其引申出的知识线整理

java里面是没有指针的概念的,但是引入了引用,他们都是为了要找到操作的目标,我认为理解他们的区别更容易使记忆深刻。并且少去了动态的malloc和free,又引出了java的JVM内存模型以及垃圾回收机制,从而也会牵扯一些java的反射以及object类的hashcode知识,更多的还有equals()和HashMap等等。从而引出一整条线的知识。对于java的内存模型、垃圾回收、反射的总结将在后几篇文章中给出。

前述:

指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元。

而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。

所比较的方面无外乎以下几个:

参数传值:java的参数是传值的,引用作为参数是,实际是给函数内部copy了一个引用值,所以在函数内部交换两个引用参数是没有意义的,因为操作的是引用的copy值,但是改变函数内部的引用参数属性是ok的,因为内部copy的引用对象和传参的引用对象指向的是同一个对象。c指针传参实际就是其指向的内容在函数内部被操作,所以是直接作用于所指向的地址的(变量,函数等)。

类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心。C指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int。

所占内存:引用声明时没有实体,不占空间。C指针如果声明后会用到才会赋值,如果用不到不会分配内存。 

初始值:引用初始值为java关键字null。C指针是INT,如不初始化指针,那他的值就不是固定的了。

计算:引用是不可以计算的。C指针是INT,所以他可以计算,所以经常用指针来代替数组下标。 

内存泄露:JAVA引用不会产生内存泄露。C指针是容易产生内存泄露的,所以程序员要小心使用,及时回收。

之所以我说到和hashCode有关联,hashCode是用来在散列存储结构中确定对象的存储地址的,可以在一定程度上理解成每个对象的“地址”,当然这个理解因人而异。

牵扯到了hashCode,当然不能不说equals(),这两者的关系以及渊源也够深。更多的,还有HashMap类,HashMap中主要是通过key的hashCode来计算hash值的,只要hashCode相同,计算出来的hash值就一样。如果存储的对象对多了,就有可能不同的对象所算出来的hash值是相同的,这就出现了所谓的hash冲突,解决hash冲突以及后面的一堆知识后面再整理吧。

  • 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、付费专栏及课程。

余额充值