900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 对 JAVA 中 “指针“ 的理解

对 JAVA 中 “指针“ 的理解

时间:2024-04-21 15:15:45

相关推荐

对 JAVA 中 “指针“ 的理解

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

首先对于:

系统自动分配对应空间储存数字 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(){};}

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

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

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(){};}

输出:

即: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(){};}

输出:

即:给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(){};}

输出:

即 good b;就是创造一个good 类空指针b。

b = new good();就是给b分配一个空间。

---------------------------------------------------------------------------------------------------------------------------------

值得注意的是对于java中的数组 :

1.

输出nums:

nums 指向的是一片地址,这片地址已经被占用只是还未被开发 。所以严格意义上讲num指向的并不是空。

2. 而对于:

输出aus:

所以两者本质的区别在于前者指向了一片未被开发的空间,而后者未指向任何空间,是一个单纯的空指针。 而两者本质上都是指针。

对于前者的判断直接判断 nums.length是否等于零即可,对于后者判断直接判断aus是否等于null即可。两者判断方式不可交换。

为了进一步证明两者皆是指针请看以下代码:

import java.util.*;public class Main {public static void main(String[] args) {int aus[] = null;System.out.println(aus);int nums[] = {};System.out.println(nums);int ads[] = {1};System.out.println(ads);nums = ads;aus = ads;System.out.println("******************");System.out.println(ads + " " + ads[0]);System.out.println(nums + " " + nums[0]);System.out.print(aus + " " + aus[0]);}}

输出:

以上就是我对这些典型事例的理解。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。