show(k[0],k[1]);
交换之后为:a=10,b=20
交换之后为:a=5,b=23
数组传地址,变量传值
trans(d[0],d[1]);传递的是值(值传递),transt(k);传递的是地址(引用传递)。
这个设计到java的内存模型,以及值传递方式,另外,楼上回答的有误,java里面没有引用传递,只有值传递,虽然你的形参是数组或者引用类型
但是传递还是值传递。
参数是int类型的时候,java会将实参的值的大小赋值给形参,之后,你在方法体里面的操作,都是对这个形参进行的操作,实参并没有受到影响。
你第一个方法,java执行时做的操作就是,在栈中创建了俩个形参变量,a和b,然后a=10,b=20,之后,你在方法体里的操作都是对创建的俩个
形参a,b的操作,并没有操作数组d[]的d[0]和d[1]这俩个内存的值。
参数是数组类型时,java会把数组在内存中的首地址赋值给形参a[]数组,然后这个形参a[]的内存里面存的就是实参k[]的首地址,之后,你在方法体里面
操作a[0]时,真正操作的就是实参k[0]的内存,所以你最后打印的结果会变。
另外说一句,如果你第二个方法,传入数组的时候,在方法体里面,把数组进行了重新赋值的操作,其实不会影响实参,如下操作:
static trans(int[] a){ a ={1,2} ;}
如果想详细了解这块,可以去这里看,https://blog.csdn.net/m0_37872413/article/details/88830124