关于String类型做为形参传递的问题,String类型做为一个特殊的类型,有着其特殊性对象
首先,String类型是一个引用类型,可是其在内存中存储倒是存储在常量池中内存
普通的引用类型做为形参传递时,咱们能够看作该方法在内存中建立了一个参数的副本,方法中进行操做时,都是对其副本进行操做,例以下图:数据类型
假设,原Student对象指向的是0x001这个地址,那么副本也是指向0x001,下一步即是将副本中name和age的值进行改变,注意,改变的仅仅只是name和age的值,而副本此时仍是指向0x001这个地址,而整个方法调用的过程当中,惟一改变的就是建立的对象中的属性;就是说,老六这我的,在22岁的时候,人家都是叫他二哥的,可是这我的仍是这我的。引用
可是,若是直接改变地址值,好比,在方法中从新new一个Student对象赋值;那么s的指向就发生了改变,可是,注意,此时改变的只是副本中的取值。假设原Student对象指向0x001,则调用方法后,副本和实参同时指向0s001;而改变的是方法建立的副本,他的指向由0x001变为了0x002,也就是说,原对象和副本指向不一样了,那么副本对其对象不管进行什么操做,对原引用类型对象无任何影响,例以下图:方法
下面咱们说说基本数据类型,基本类型在副本中操做时,直接进行赋值,并无地址的改变。等因而你的双胞胎弟弟,他作什么,跟你毛关系么得。im
最后说下最特殊的String类型,每个String类型的对象都指向常量池中的一个地址,按道理,他的传递应当和引用类型的原则一致。数据
可是它有个特殊的特色在于,String类型的值改变,地址就会改变(内容相同,指向就相同,只要内容不一样,指向就不一样),如图:img
因此说,虽然可能在形参中只是改变了String对象的值,可是其地址却也是改变了,以下:new
就是说,副本中地址变了,跟原对象就没了关系参数