java小基础(1)关于参数传递

来源:互联网 发布:java从网页抓取数据 编辑:程序博客网 时间:2024/06/10 09:23

题目:

               Integer integer=new Integer(1);

               A(integer);

               System.out.println(integer);

              

               String string="nu";

               B(string);

               System.out.println(string);

              

               StringBuilder sBuilder=new StringBuilder();

               C(sBuilder);

               System.out.println(sBuilder);

              

              

              

               int i=0;

               E(i);

               System.out.println(i);

               private static void E(int i){

                       i=99;

               }

              

               private static void A(Integer i){

                       i=new Integer(2);

               }

               private static void B(String s){

                       s="wori" ;

               }

               private static void C(StringBuilder sb){

                       sb.append("ADAD");

               }

 

求输出。

先说结果:除了一个有改变,其他不变

其实这个很简单的~基础过关秒杀;

说说重点:明白参数传值的原理。然后一切明了

首先:参数传值都是值传递。所以传进来的都是地址(针对引用类型)或者值(针对值类型),然后这个参数就被赋值了。例如:B(string);private static void B(String s)。说的就是有个String类型的变量s指向String类型的变量string所在的地址空间

接下来:看函数对这个参数进行什么操作,就用函数B为例子。

private static void B(String s){s="wori" ;}这个String类型的变量s重新指向一个值为“wori”的地址空间(为什么会重新指向,这个不用说了吧),那么就是跟变量string一点关系都没有,变量string一直指在值为“nu”的地址空间。所以输出是nu

但是为什么函数C会改变呢?因为StringBuilder类型的变量sb它指向的地址没有变,跟StringBuilder类型的变量sBuilder一样。所以对变量sb进行的操作依然对变量sBuilder有影响。

解释完毕。总结:不知道为什么老是记不住的。于是写下来。求大家拍砖

 

 

 

原创粉丝点击