建设公司网站需要钱吗,北京广告公司标牌制作,综合性门户网站有哪些,wordpress 404 跳转笔者前两天在参加菜鸟面试的时候被面试官问到了这个问题#xff0c;由于只在本科程序设计课上学过C#xff0c;已经好久没有开发实际项目#xff0c;所以对C相关的指针以及引用的记忆较为模糊#xff0c;在此进行一定的知识汇总与梳理。 我们以面试中出现的问题为例来进行整…笔者前两天在参加菜鸟面试的时候被面试官问到了这个问题由于只在本科程序设计课上学过C已经好久没有开发实际项目所以对C相关的指针以及引用的记忆较为模糊在此进行一定的知识汇总与梳理。 我们以面试中出现的问题为例来进行整理。
定义
1. 指针
指针是存储内存地址的变量其目的是充当该地址存储的内容的别名。
所以指针是引用但引用不一定是指针。指针是引用概念的特定实现该术语往往仅用于可让您直接访问内存地址的语言。
2. 引用
引用是指引用其他内容的变量并且可以用作该其他内容的别名。Java引用和C的指针有什么区别
本质不同
Java的引用是对象的另一个别名其代表已经存在对象额另一个名字用于访问该对象。
C的指针是一个变量其存储了一个内存地址通过该地址即指向一个对象。
指向对象的方式不同
Java引用必须进行初始化并且其创造后不能进行更改。引用在创建时必须指向一个已存在的对象否则会抛出异常。
C指针可以在创建后重新更改指向的对象。即可以使用指针指向一个新建的对象或者将指针从一个对象切换到另一个对象。
安全性不同
Java引用提供安全的方式来访问对象因为其不能指向空对象。如果试图访问引用为null的对象则会抛出异常。
C指针可以指向null或未初始化的内存地址这可能导致程序崩溃或未定义行为。
类型检查不同
Java引用在编译时会进行严格类型检查确保引用指向正确的对象类型。
C指针在编译时不进行类型检查但是在运行时可能会触发未定义行为因为指针可以指向任何类型的对象。 Java中有指针吗
Java 中没有明确的指针概念但是有一些类似于指针的特性如this关键字和new关键字。
而且Java中不涉及指针可能更重要的还是考虑到了安全因素。因为如果您获得任何变量的地址您就可以从程序的任何位置访问它而不受任何限制即使变量是私有的。
1. 通过指针运算访问内存
Java语言禁止指针算数。考虑到指针算数本身对虚拟机有巨大的挑战禁止指针可以避免运行时的大量检查带来的开销。这样能够为开发人员提供较为安全可靠的环境。
2. 安全性
不使用指针可以为开发人员提供额外的抽象层使开发者免受与直接内存管理相关的复杂性与潜在陷阱的影响。
3. 通过引用传递参数
Java不支持传递允许修改调用者作用域中的变量的引用。在Java中对变量的修改通常通过返回值或对象操作来实现从而保持语言对封装的重视并且防止意外的副作用。
4. 手动内存管理
C和C语言允许手动控制和内存分配对于游戏和设备驱动程序等应用程序非常有用。但是对于面向对象编程来说使用指针会带来复杂性和潜在的错误。
另一方面Java本身提供了垃圾收集策略作为内存管理策略的一部分。 垃圾收集器能够自动识别并回收使用的内存将程序从手动内存管理任务中解放简化开发过程有助于防止内存泄漏以及相关问题的出现。 Java引用和C引用的区别
在 C 中引用只是对象的别名。它们只能引用初始化引用时设置的单个对象。
Java 引用类似于 C 中的 std::shared_ptr。它们一次只能引用一个对象但可以重新绑定。它们还给出了对象生命周期的下限即只要有一个对该对象的引用强引用该对象就不会被垃圾收集。
总结一下
1. C 引用在引用的生命周期内绑定到同一个对象并且在控制对象的生命周期中不发挥任何作用。
2. Java 引用一次绑定到一个对象但可以在程序执行时分配给其他对象。如果存在对对象的任何引用则不会被垃圾收集这与 C 不同在 C 中拥有对对象的引用并不意味着该对象还活着。 扩展阅读
[Solved] difference between java reference and c reference - CodeProject
Why Java does not support pointers?
C/C Pointers vs Java References - GeeksforGeeks