对于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(){};
}
输出:
以上就是目前我对此特殊指针案例的理解。