JAVA中的指针

OpenWrt南京电信PPPoE IPv6配置:从零搭建稳定双栈网络 本文详细指导如何在南京电信PPPoE宽带环境下,为OpenWrt路由器配置稳定的IPv6双栈网络。核心在于正确设置WAN6接口为DHCPv6客户端,并请求/60前缀,同时配置LAN口分发地址并放行防火墙关键流量,确保内网设备获得原生IPv6连接。 阅读详情

采摘处:http://www.iteye.com/topic/320129


最近因为项目中有个用读卡器读IC卡的需求,于是用到了Java调用*.dll文件,在*.dll文件中的方法都是用C++来实现的,所以当中很多方法都涉及到了“指针类型”,于是就想Java中是否有指针,或者类似指针的功能。

 

      通过查找资料了解Java不是没有指针,而是对指针进行了伪装:使用上泛化、强化和简单化,概念上淡化和弱化。具体描述如下:

      C++中可以有对象类型的变量和对象指针类型,两者的区别如下: 

Cpp代码  收藏代码
  1. Object oo = Object();   
  2. Object * oop = new Object();   

       也就是说当使用new方式时,是动态为对象分配内在并将地址赋给oop这个指针变量。

      JAVA中只有一种相关类型:对象类型,可是它的表现形式却是这样的:

Java代码  收藏代码
  1. Object oo = new Object();   

      比较一下,原来它就是使用了C++的动态内在分配方式创建了一个对象,并把地址返回给了oo变量,也就是说oo本质上就是一个指针变量。引申一下:JAVA中的对象类型本质上应该叫做“对象指针”类型。那么传统的对象类型呢?在JAVA里已经不见了踪影!


      既然没有了传统的对象类型,那么对象指针变量前面的*也就可以不要了。对象指针变量也就可以简称为对象变量了,反正也不会和其它概念混淆!所有的对象变量都是指针,没有非指针的对象变量,想不用指针都不行,这就是指针的泛化和强化。

      不叫指针了,就叫对象变量,这就是概念上的淡化和弱化。没有了指针的加减运算,也没有了*、->等运算符,这是对指针的简单化。

      这可以从很多方面得到验证。

      首先,JAVA强调所有的对象赋值和传递都是引用,解释如下: 
      

Java代码  收藏代码
  1. Object a=new Object();  

       并不是将新生成的对象赋给a,a是对新生成对象的引用:     

Java代码  收藏代码
  1. Object a=new Object();   
  2. Object b;   
  3. b=a;   

      b并不是一个新对象,它是对a对象的引用。好复杂啊!
      其实呢,a是指针,b也是指针,将a的值赋给b,也就是将a所存储的地址赋给b,b自然指向了a所指向的对象。

      其实,JAVA强调两个对象的相等比较不是比较两个对象的值是否相同,是比较两个对象是不是相同的引用。解释如下: 

Java代码  收藏代码
  1. Object a=new Object();   
  2. Object b=a;   

       a==b为真,两个对象引用相同。 

Java代码  收藏代码
  1. String a=new String("abc");   
  2. String b=new String("abc");   

      a==b为假,两个对象引用不同。
      不太明白是吧?
      其实呢,==的意义并没有变。a是指针,b也是指针,a、b存储的都是地址,当两个变量存储了同一个对象的地址时,这两个地址当然相等,a==b自然是真。当两个变量存储了不同对象的地址,这两个地址值当然不同,a==b自然为假。

      然后,一个问题出现了,怎么生成两个完全相同的对象呢?
      在Thinking in Java中用了很长的篇幅去解释clone的用法,因为只有克隆才能真正生成两个完全相同的对象--在C++中本来很简单的问题变得复杂了--不过也没什么,有利必有弊嘛,反正用的时候也不多。

       最后,再看看链表的问题,用C做例子吧(可以移植到C++):

Cpp代码  收藏代码
  1. struct linktable{   
  2.   int a;   
  3.   float b;   
  4.   struct linktable c;   
  5. }   

       是不行的,因为在定义c时需要确定它要占用的内存,struct linktable还没有定义完,没法确定,象下面这样做吧:

Cpp代码  收藏代码
  1. struct linktable{   
  2.   int a;   
  3.   float b;   
  4.   struct linktable * c;   
  5. }   

      c是指针,它占用的内存大小是固定的,与它指向的数据类型的空间无关,因此可以确定。


      再看JAVA,号称没指针也能做链表:

Java代码  收藏代码
  1. class linktable{   
  2.   int a;   
  3.   float b;   
  4.   linktable c;   
  5. }   

      其它也没什么,不是说了吗,JAVA的对象变量实质上就是指针变量,c就是个指针:linktable c; 和 struct linktalbe * c; 本质上完全相同!




Altium Designer(AD24/25)如何在PCB设计阶段做阻抗匹配 目前阻抗匹配多直接有制版厂进行,PCB设计师在设计阶段可不关注阻抗设计,在加工阶段只需标注需要控制的阻抗线,制板厂即可按照要求对阻抗线进行调整和控制。但是对于设计师来讲掌握阻抗线的设计方法也是非常必要的。本文介绍Altium Designer(AD24/25)如何在PCB设计阶段做阻抗匹配。 阅读详情

相关推荐

Flowable前端可视化配置动态审批人:告别硬编码,实现部门领导、项目经理自动分配

本文详细介绍了Flowable前端可视化配置动态审批人的全栈解决方案,通过表达式分配、监听器分配等动态审批人机制,实现从硬编码到智能分配的转变。文章提供了前端扩展bpmn-js设计器、后端动态解析实现方案及性能优化建议,帮助企业应对组织架构变动,提升审批流程的灵活性和效率。

weixin_30352645的博客 473

对 JAVA 中 “指针“ 的理解

即没有给a[0]分配空间,即只有变量名,没有指向空间。那么a[0]就是一个good类空指针。变量名称 空间。1. 首先我们设立了一个good类,并定义了一个good类数组a。即a[0],a[1].......,a[N - 1]都是good类。(以上就是目前我对此特殊指针案例的理解)2.令a[0]内的m,v进行赋值。

Narnat的博客 6365

宏基因组分析|从Binning到MAG优化的全流程实战指南

本文提供了一份宏基因组分析从Binning到MAG优化的全流程实战指南。详细解析了宏基因组分箱(Binning)的核心原理与必要性,并手把手指导如何利用Bowtie2、MetaBAT2和CheckM等工具构建分箱流水线,进行质量评估与筛选,最终获得高质量宏基因组组装基因组(MAG)。文章还分享了常见问题排查与进阶优化策略,为后续物种分类、功能注释等深度分析奠定坚实基础。

weixin_29260291的博客 455

深入理解Java中的指针——引用

基于Java特性以及C++中指针特性的关于Java中引用类型的理解

2301_79698279的博客 3203

SPECweb2009调优指南

 SPECweb2009 是衡量 Web 服务器性能和能效的标准化基准,可以对 Web 服务器的并发数进行性能测试,评测 Web 服务器能够支持的最大同时连接数的客户端/服务器(每秒能够响应的最大请求数)。为充分利用服务器性能,提升SPECweb2009测试结果,可通过增大系统进程数、优化服务器软件参数、绑核以及优化参数等。

developersupport的博客 2607

CS231n+assignment2(一)

cs231n作业二详解+代码

qq_56551150的博客 2411

小研究 - Java 指针分析综述(一)

小研究 - Java 指针分析综述(一)

2675

卸载重装Ubuntu22.04双系统

先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗

编程小白的博客 8106

JAVA里面的“指针”(对象引用)

      众所周知,在java里面是没有指针的。那为何此处还要说java里面的“指针”呢?我们知道在C/C++中,指针是指向内存中的地址,该地址就是存储变量的值。该地址所存储的变量值是“公有”的,此处的“公有”是对于拥有该地址的变量而言。它们都可以访问该地址的内容,并且可对其就行修改,一经修改则所有指向该地址的变量值也将改变。那么在Java里面何来的指针?在java里面没有指针的定义。但是java里面的“指针”无处不在。下面将进行介绍。 我们知道JAVA里面用的最多的就是对象

博客 9424

流形优化: Manifold Optimization 的 全网最通俗版本详解 (一)

前言 之前忙于论文, 停更了很久。 接下来的一段时间,出于各种原因, 决定在优快云平台上做 最近在 混合波束成形 及 智能反射面 领域 非常常见的流形优化 (Manifold Optimization) 算法 的专题介绍。尽管目前已有了不少的中文博客, 但出于其各种弊端, 使得本篇的成文仍有其不可或缺的意义。 而如果要盘点最核心的意义, 就在于这篇是对读者的 数学能力 与 阅读理解能力 要求最低的 流形优化讲解了。 唯一参考的文献为 Manopt 工具包作者 Boumal 的 新书: An introd

B417科研笔记 2万+

《电磁兼容设计》专栏说明

本专栏自2024年1月起开始更新,仅设此一个电磁兼容相关知识专栏,并将一直持续更新下去,无期限

linkking27的博客 791

java中指针的用法

java中指针的简单用法

m0_46464899的博客 1566

零件边界线提取处理原理详解

该程序提出了一种高效的点云边界提取方法,通过三阶段处理流程实现零件几何特征的精确提取。首先采用RANSAC算法进行坐标系标准化,包括主平面检测、点云分割和双重旋转对齐。接着使用凹包算法和RANSAC直线拟合提取底面边界。最后通过多方向密度切片分析(Z向100片、X向50片),自动选择高密度切片进行边界提取和直线拟合。算法具有鲁棒性强、处理效率高(支持OpenMP并行计算)和参数可配置等特点,能有效提取零件的几何边界特征,为后续质量检测提供基础。实验结果显示该方法能准确提取零件的多方向边界线。

weixin_45196569的博客 432

java 中的指针_Java中的指针

java 中的指针 Java中有指针吗? 简短的答案是“不,没有”,这对于许多开发人员来说似乎是显而易见的。 但是,为什么对其他人却不那么明显呢? http://stackoverflow.com/questions/1750106/how-can-i-use-pointers-in-java http://stackoverflow.com/questions/2629357/do...

最佳 Java 编程 2807

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java中的指针和this指针、super指针

目前自认,this指针用于指向当前类的对象

u010804417的博客 959

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java中的指针

Java中是否有指针? 简短的答案是“不,没有”,这对于许多开发人员来说似乎是显而易见的。 但是,为什么对其他人却不那么明显呢? http://stackoverflow.com/questions/1750106/how-can-i-use-pointers-in-java http://stackoverflow.com/questions/2629357/does-java-...

最佳 Java 编程 1640

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java int 指针_JAVA中的对象指针

JAVA中可以说没有指针,因为实际上我们在程序中不会直接操作地址,C++中的*、->操作在JAVA中都不能正常使用。JAVA中也可以说到处都是指针,因为实际上我们定义一个对象,并给它初始化的时候,这个定义的类对象实际上就是指针。JVAA中函数的参数是基本类型和对象类型时,他们的处理是不一样的,基本类型传递的是值,而对象类型传递的是引用(类似于指针)。在java中说“指针”,实际上就是说的引用...

weixin_29170327的博客 767

Java中的空指针异常

Java中的空指针异常一、什么是空指针异常?1.1 异常的分类1.2 空指针异常引入1.3 空指针异常说明二、Java中的null三、空指针产生的常见情况及避免办法3.1 字符串常量未初始化,比较时导致空指针异常3.2 接口类型的对象没有使用具体的类进行初始化导致空指针异常3.3 参数类型为包装类型,使用时自动拆箱导致空指针异常3.4 对象为空,但未判空导致空指针异常3.5 对key、value不能为null的容器put为null的key、value值导致空指针异常3.6 方法或者远程服务返回的list不是

qq_50994235的博客 7264

java 指针操作_如何在Java中使用指针?

Java中的所有对象都是引用,您可以像使用指针一样使用它们。abstract class Animal{...}class Lion extends Animal{...}class Tiger extends Animal{public Tiger() {...}public void growl(){...}}Tiger first = null;Tiger second = new Tige...

weixin_39833687的博客 2380

java 指针 引用_java中的引用与c中的指针

指针首先要弄清楚指针和c中的指针是不一样的,前者是概念,后者是具体实例。换句话说,C中的指针只是指针中的一种,其他语言也有指针,比如C++。但是我们同别人交流的时候,大都不会从概念上去交流,一般会选择其中一个实例去说,这个实例大部分时候都是C中的指针。久而久之,概念和实例被模糊化,C中的指针也成为了指针本身。在这里我还是有必要给自己的大脑提个醒,不要将概念和实例混为一谈,要分清两者的界限。指针定义...

weixin_39940154的博客 420

从Java的指针到Go的指针

文章目录指针内存地址Go的指针类型指针指针的三种创建方式切片组成特性指针的使用 指针 学Java以来,忽略了指针和内存地址这些概念,Java帮我们封装了对象,简化了对象引用之间的关系。在Go语言中,又帮我们回忆起这些概念。 内存地址 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。 所以一个常量或者是没有赋值的量是没有内存地址的 i := 1997 fmt.Printf("num is : %d, it's location in memory: %p\n",i,&i) //输出:n

qq_41354702的博客 374

java 数组 指针_java指针数组的使用

1,一直都在学java是没有指针的,让我纠结的是java指针确实是存在的,java数组就是真正的指针。以为C语言老师说过C语言里数组就是指针,但是我感觉这句话用在C语言里不是很严谨,而用在java里是很恰当的。C语言里的数组是常指针。package com.tarena.day05;import java.util.Arrays;public class Point {/***java 指针演示*...

weixin_28987547的博客 1779

java中引用和指针

首先,提个问题:JAVA中没有指针,JAVA中有指针,哪个一个对呢? 答:都对,JAVA中没有指针,因为我们不能对指针直接操作,像C++那样用->来访问变量。 JAVA有指针,因为JDK中封装了指针。(现在我们就来找到这个指针) 注意: 1、指针变量有两层含义 1) 指针变量里存的是地址(它指向的变量的首地址)。 2) 指针变量有类型,类型说明了该指针指向的变量在内存中的范围(大小)。 2、...

席同学的博客 7420

Java中有没有指针

1.Java中没有指针? 有些没学过c的朋友可能还不知道什么指针。 指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(Pointed to)存在电脑存储器中另一个地方的值。也就是通过地址可以找到所需的变量单元,可以说,地址指向该变量单元。 那么Java中有没有指针呢? 有些初学Java的小伙伴可能会说:“Java中哪里有指针呢?我见都没见过”。 确实,Java中没有指针的概念,但是学过c语言的小伙伴很快就会有新的疑惑——“如果Java不存在指针的话,那么是如何实现复杂的数据结构?”

风过孤屿,山海自成诗行。 1万+

java中出现指针_Java中的指针

C支持指针,而Java则不支持.但是当许多程序员质疑如何在没有指针的情况下工作时,发起人开始说“受限制的指针”.所以我们可以说Java支持受限制的指针?解决方法:这里的术语非常模糊.Java支持它所谓的“引用”.引用很像C/C++类语言中的指针.它们的行为与“引用”在这些语言中的工作方式不同.C中的指针与Java中的引用之间的主要区别是:>您不能在Java中执行指针运算(即,您不能从Java...

weixin_29532173的博客 247
上一篇: JAVA中的指针,引用及对象的clone
下一篇: java 指针 数组的使用
crazy_fire
博客等级 码龄18年 19粉丝 57原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值