对JAVA 中“指针“理解

news/2025/1/3 6:42:55/

对于Java中的指针,以下典型案例会让你对指针的理解更加深刻。

首先对于:

f24826fcb2a34d9c9895c4cf831503da.png

  系统自动分配对应空间储存数字 1,这个空间被变量名称b所指向即:

  b                    ——>                1

变量名称                                空间

明白上述再来分析以下典型案例:

import java.util.*;public class Main {public static int N = 100;public static void main(String[] args) {good a[] = new good[N];a[0].m = 1;a[0].v = 2;System.out.print(a[0].m + " " + a[0].v);}
}
class good{int m;int v;good(){};
}

对以上代码的测试结果可以试着自己分析一下,正确结果如下:

8e2694384a704b218baeb01f1a370d1d.png

为什么会报错?对代码进行分析:

    1. 首先我们设立了一个good类,并定义了一个good类数组a。即a[0],a[1].......,a[N - 1]都是good类。

    2.对a[0]内的m,v进行赋值。

对a[0]单独输出试试 :

import java.util.*;public class Main {public static int N = 100;public static void main(String[] args) {good a[] = new good[N];System.out.print(a[0]);}
}
class good{int m;int v;good(){};
}

输出: dfb69a06805a44d8a7d4d28551ebb0d1.png

即:  a[0]     ——>       null

  推测出,本代码没有给a[0]分配空间,即只有变量名,没有指向空间。那么a[0]就是一个good类空指针。

修改方法:

import java.util.*;public class Main {public static int N = 100;public static void main(String[] args) {good a[] = new good[N];a[0] = new good();a[0].m = 1;a[0].v = 2;System.out.print(a[0].m +" "+ a[0].v);}
}
class good{int m;int v;good(){};
}

输出:

c2098468168c47b2b5209c56b66919a3.png

即:给a[0]分配空间后再对,空间内部变量m,v操作 。

为了进一步证明a[0]是good类型空指针:

  如下对a[1]分配空间,对内部变量进行操作,再让a[0] 指向 a[1]所指向的空间即a[0],a[1]都指向一处空间:

import java.util.*;public class Main {public static int N = 100;public static void main(String[] args) {good a[] = new good[N];a[1] = new good();a[1].m = 1;a[1].v = 2;System.out.println(a[0]);a[0] = a[1];//a[0]指向a[1]System.out.println(a[0].m +" "+ a[0].v);System.out.print(a[1].m +" "+ a[1].v);}
}
class good{int m;int v;good(){};
}

输出: 

b4f4428f6fa1464b9668a0325f6862e6.png

以上就是目前我对此特殊指针案例的理解。

 


http://www.ppmy.cn/news/25534.html

相关文章

code01 v2黑屏、花屏、死机、断电重启、休眠死机的进来

症状解决 长话简说,症状如下: 使用浏览器、播放视频等,遇到突然死机或花屏死机的情况 关闭硬件加速,如:浏览器中设置关闭硬件加速,出现这种症状的软件都需要设置 开机电流音、播放与暂停时喇叭吱吱想、打…

测试流程记录

1,需求评审 2,技术方案评审 3,编写测试用例 编写需求分析 编写测试用例 编写冒烟case 4,用例评审 5,提测 提测前给开发执行冒烟case 6,测试 测试完成前约产品验收时间 7,验收 跟进验收问题…

基于Java+SpringBoot+SpringCloud+Vue前后端分离医院管理系统设计与实现

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建、毕业项目实战、项目定制✌ 博主作品:《微服务实战》专栏是本人的实战经验总结,《S…

Linux——操作系统安装

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…

矩阵理论复习(十二)

已知方阵A的不变因子: 求谱半径求矩阵级数判断矩阵幂级数的收敛性 若矩阵B的某个算子范数小于1,则I-B可逆。 矩阵分析 任何相容矩阵范数都存在与之相容的向量范数。 盖尔圆盘定理一的证明 椭圆范数的证明 若||.||是Cm上的向量范数,A为…

Spring 框架源码(六) Bean的生命周期全流程源码解析

Spring框架作为Java王国的地基,我觉得它包含了很多精妙的设计,例如Bean工厂设计、Bean的生命周期、tx、aop、web、mvc等,最核心基本的Bean设计是Spring 的框架的灵魂,本文就Bean的生命周期全流程做源码程度上的解析,欢…

机器人操作规划——Deep Visual Foresight for Planning Robot Motion(2017 ICRA)

1 简介 model-based RL方法,预测Action对图像的变化,以push任务进行研究。 采用完全自监督的学习方式,不需要相机标定、3D模型、深度图像和物理仿真。 2 数据集 采用几百个物体、10个7dof机械臂采集了包括5万个push attempts的数据集。 每…

CAD二次开发 添加按钮Ribbon

这篇文章是教大家怎样子创建自己的Ribbon按钮界面(如下图),以下示例代码在CAD2020中运行实现。 背景 创建一个属于自己的Ribbon按钮(如下图) 理解Ribbon、Panel、Tab的关系(如下图)&#xff…