java 几个面试知识点的总结与复习
一、关于java中的值传递
在java中向方法传递参数的时候无论传递的是原生类型参数还是引用类型的的参数都是值传递!java中没有引用类型的传递!
对于原生类型来说它们的存储地址是再栈内存(stack)里面的,而引用类型的对象的存储地址则是存储再堆内存(heap)中。
方法中的局部变量的使用的时候实际上压栈的操作,而栈则是先进先出的数据结构,方法调用完之后就会从栈内存中弹出该地址的变量。
对于原生数据类型的传递的是原生数据类型的值,引用类型的对象传递的是addressValue(对象的地址)
public class Example { private String str = new String("goodsss"); private Integer i = 22; private int aa = 0; private char[] ch = {'a','b','c'}; private Stu s = new Stu(111111); public static void main(String[] args) { Example e = new Example(); e.change(e.str,e.ch,e.i,e.aa,e.s); System.out.println(e.str); System.out.println(e.ch); System.out.println(e.i); System.out.println(e.aa); System.out.println(e.s.aaa); } private void change(String striii,char[] chaaa,Integer aaaaai,int a,Stu s){ striii = "good"; aaaaai=26; chaaa[0] = 'g'; aa = 11; s.aaa = 9999; } } class Stu { public Stu(int aa){ this.aaa=aa; } public int aaa ; }
输出结果:
goodsss
gbc
22
11
9999
由上面的例子可以看出 基本数据类型和String 值传递的时候都是直接传递的是值,相当于把它们的值赋值给方法中的变量,所以再方法中改变它们的值并不能直接修改它们
引用对象值传递的时候传递的是引用的地址值,可以改变方法里的地址值指向的对象,就等于改变了原来地址指向的对象。