昨天看了一道J2SE选择题,是关于Java参数传递的知识,居然没有做对,记得在刚开始学习Java的时候是看的Sun公司提供的一本Java书,写的非常好,而且清晰的记得就有类似的一道题,今天重新补充了一下,发现自己原来也是死读书的一位;
关于参数传递用的比较多的是String对象的传递,不过String对象的传递前我们来看研究一下String对象。
一、String对象的创建
1、String a = "ab";当我们创建a这个对象时,Java虚拟机就会在String内存池中查找是否有"ab"这个对象,如果有就把a指向这个对象,如果没有那么在String内存池中创建这个对象,并让a指向它;这里的"ab"是一个具体的对象,而a是这个对象的一个引用。
2、String a = new String("ab");如果用new关键字来创建对象a时,就会在堆内存中创建一个"ab"的对象,然后让a指向它。
可以看出String对象在不用new来创建时会有一个String内存池的概念,这是和其他对象不同的地方;
二、String对象的修改
String a = "ab";创建了一个a对象
a = "abcd";Java虚拟机会在String内存池中创建一个新的"abcd"对象然后让a指向这个新的对象。
我认为String对象的String内存池造成了参数传递过程中的不可变型。
感谢赵哥