《2022年2022年理解String参数传递 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年理解String参数传递 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、对于 JAVA 来说,基本数据类型的参数传递是值传递,在方法里面修改对外部没影响。而对于对象类型的参数传递是传引用,也就是说是传地址。但对于 Strnig,Integer等类型来说就有不同了,看以下代码。Java 代码1.publicclassParameter2.publicstaticvoidmain(Stringargs)3.Stringa=newString(4);4.Stringa1=a;5.checekParameter1(a1);6.System.out.println(a);7.8.9.publicstaticvoidchecekParameter1(Stringa2)10.a
2、2=5;11.12.它的输出依然是4,方法不会改变它的值。按我的理解是String a=new String(4);它会先在常量池创建一个对象,然后把它复制后在堆里也创建了一个对象。String a1=a;这句话来说,是把a 在常量池的地址赋给a1,当它传递给 a2 时,依然是把a 在常量池的地址赋给a2。a2=5 这句它会先在常量池找有没5这个字符串,没的话就会创建一个新的对象。所以a2 的地址发生了变化,但 a 的地址没发生改变,所以输出的依然是4。按我的理解:String a1=a;这句代码传给a1 的是 new String(4)的地址,不过当调用那个方法的时候,会新建一个a2 的变量
3、指向 new String(4)的地址,所以当你改变a2 的时候并不会改变a 和 a1 的值,只是将a2 的地址指向了“5”。按我的理解:String a1=a;这句代码传给a1 的是 new String(4)的地址,不过当调用那个方法的时候,会新建一个a2 的变量指向 new String(4)的地址,所以当你改变a2 的时候并不会改变a 和 a1 的值,只是将a2 的地址指向了“5”。对的.可以通过改造下代码来验证哦.Java 代码1.publicclassParameter2.publicstaticvoidmain(Stringargs)3.Stringa=newString(4);
4、4.checekParameter1(a);5.System.out.println(a);6.7.8.publicstaticvoidchecekParameter1(Stringa2)9.System.out.println(a2=4);名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 3 页 -10.a2=5;11.12.我认为 a2 指向的地址应该是常量池中a 的地址,而不是堆中的Java 代码1.StrungBuffers=new StringBuffer(hello);2.t1(s);3.System.out.println(s);4.5.t2(s);6.System.
5、out.println(s);7.8.9.privatevoidt1(StringBuffers)10.s=newStringBuffer(olleh);11.12.13.privatevoidt2(StringBuffers)14.s.append(world!);15.java 中 super()与 this()的区别This():当前类的对象,super 父类对象,所有的资源都可以访问。Super():在子类访问父类的成员和行为,必须受类继承规则的约束,在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用 private 修饰).此时你必须加入对父类的实例化构造.而名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 3 页 -this 就没有这个要求,因为它本身就进行实例化的构造。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 3 页 -