您的位置 首页 java

关于java 变量“指针”实验报告

通篇说明:

System.out.println(object)是 java 语言用于获取对象的内存地址的方法。

案例一:

int a=0;

int b=0;

System.out.println(“*************案例1****************”);

System.out.println(“a=>”+System.identityHashCode(a));

System.out.println(“b=>”+System.identityHashCode(b));

b=123;

System.out.println(“2: a=>”+System.identityHashCode(a));

System.out.println(“2: b=>”+System.identityHashCode(b));

System.out.println(“a =”+a+” b=”+b);

现象:

*************案例1****************

a=>1513712028

b=>1513712028

2: a=>1513712028

2: b=>1908316405

a =0 b=123

**********************************

结论:java虚拟机在执行变量赋值时候,会自动去找以往已经声明的变量空间值,如果发现有和现有需要空间值一致时,会自动把第一个的变量的内存地址赋值给新的变量,这样减少内存使用空间,这就是“传址”赋值。

案例二:

int a=0;

int b=0;

System.out.println(“*************案例2****************”);

System.out.println(“a=>”+System.identityHashCode(a));

System.out.println(“b=>”+System.identityHashCode(b));

b=123;

System.out.println(“2: a=>”+System.identityHashCode(a));

System.out.println(“2: b=>”+System.identityHashCode(b));

System.out.println(“a =”+a+” b=”+b);

System.out.println(“**********************************”);

现象:

*************案例2****************

a=>1513712028

b=>1513712028

2: a=>1513712028

2: b=>1908316405

a =0 b=123

**********************************

结论:

java程序在为变量改变值,如果发现一个空间同时被两个变量使用时候,当其中一个变量值需要重新赋值时候,会自己申请一个新的内存空间来为这个变量保存值,从而不会造成另一个变量数据错误,这点又何其他 编程语言 (如golang)的“传址”赋值不一样。

案例三

System.out.println(“*************案例3****************”);

int[] ArrayA={111,111};

int[] ArrayB=ArrayA;

int[] ArrayC=new int[2];

System.arraycopy(ArrayA,0,ArrayC,0,ArrayA.length);

System.out.println(“1:ArrayA=>”+System.identityHashCode(ArrayA));

System.out.println(“2:ArrayB=>”+System.identityHashCode(ArrayB));

System.out.println(“2:ArrayC=>”+System.identityHashCode(ArrayC));

ArrayB[0]=222;

System.out.println(“2:ArrayA=>”+System.identityHashCode(ArrayA));

System.out.println(“2:ArrayB=>”+System.identityHashCode(ArrayB));

System.out.println(“ArrayA[0]=”+ArrayA[0]+” ArrayB[0]=”+ArrayB[0]+” Arrayc[0]=”+ArrayC[0]);

System.out.println(“*********************************”);

现象:

*************案例3****************

1:ArrayA=>1720435669

2:ArrayB=>1720435669

2:ArrayA=>1720435669

2:ArrayB=>1720435669

ArrayA[0]=222 ArrayB[0]=222

*********************************

结论:

java对于像数组和对象完全是按着标准的“传址”赋值的原则,其中一个变量改变了值,另一个也会随着变化,这就是 c++ 的指针赋值。在java要复制一个梳子不能用“=”,需要使用“System.arraycopy()”;

案例四

System.out.println(“*************案例4****************”);

int c=1;

Integer d=Integer.valueOf(“1”);

int e=Integer.valueOf(c);

System.out.println(“c=>”+System.identityHashCode(c));

System.out.println(“d=>”+System.identityHashCode(d));

System.out.println(“e=>”+System.identityHashCode(e));

System.out.print(“采用‘==’判断”);System.out.println(c==d);

System.out.print(“采用‘equals’判断”);System.out.println(d.equals(e));

int[] A={1};

int[] B=new int[1];System.arraycopy(A,0,B,0,1);

System.out.println(System.identityHashCode(A));

System.out.println(System.identityHashCode(B));

System.out.print(“采用‘=’判断”);System.out.println(A==B);

System.out.print(“采用‘equals’判断”);System.out.println(A.equals(B));

System.out.print(“采用Arrays.equals()判断”);System.out.println(Arrays.equals(A,B));

System.out.println(“*********************************”);

现象:

*************案例4****************

c=>846492085

d=>846492085

e=>846492085

采用‘==’判断true

采用‘equals’判断true

1096283470

152005629

采用‘=’判断 false

采用‘equals’判断false

采用Arrays.equals()判断true

*********************************

结论:在java中,“==”是根据内存地址来作为判断依据,所以不能用于判断两个对象,而object.equals()是用于类对象判断的,但是不能用于判断数组,因为数组包含了多个对象,所以只能使用Arrays.equals()来比较。

文章来源:智云一二三科技

文章标题:关于java 变量“指针”实验报告

文章地址:https://www.zhihuclub.com/200811.shtml

关于作者: 智云科技

热门文章

网站地图