方法和传递(方法传递分为哪两种-)

  本篇文章为你整理了方法和传递(方法传递分为哪两种?)的详细内容,包含有方法传递参数的机制 方法传递分为哪两种? 方法传递参数 方法传递参数需要注意什么 方法和传递,希望能帮助你了解 方法和传递。

   8 //值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

   9 // 与

   10 // 引用传递:是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数

   11 //按共享传递,是指在调用函数时,传递给函数的是实参的地址的拷贝(如果实参在栈中,则直接拷贝该值)

   12 public static void main(String[] args) {

   14 int m= max(12,12);

   15 System.out.println(m);

   18 //调用printMax方法:

   19 double dou=printMax(1,5,6,7,8);

   20 System.out.println(dou);

   24 ///传递【1.可以发现,数据并没有发生改变】

   25 System.out.println("----传递【1.可以发现,数据并没有发生改变】----");

   26 String tes="正常数据";

   27 System.out.println(tes);

   28 test(tes); //试着改变tes的内容

   29 System.out.println(tes);

   30 /*

   31 解析: 是tes变量的拷贝,不是真正的tes,test()方法中改变的是拷贝,对真正的tes是没有影响的

   32 */

   34 //【2.发生纠结:引用类型的时引用传递??????】

   35 System.out.println("----传递【【2.发生纠结】】----");

   36 Users users=new Users();

   37 users.setName("测试代码");

   38 users.setAge(999);

   39 Users us=test1(users); //试着改变users的内容【结果发生改变】

   40 System.out.println(us.getAge());

   41 System.out.println(us.getName());

   42 /*

   43 解析: 指向的地址是同一个,因此对变量中的数据修改时,还是会影响到原来真实的变量

   44 */

   47 //3.决定一探究竟

   48 System.out.println("----决定一探究竟String引用类型----");

   49 String strOld="我要试试String这个引用类型怎么样";

   50 System.out.println(strOld);

   51 strOld="什么鬼,发生改变了";

   52 System.out.println(strOld);

   53 /*

   54 解析:String变量比较特殊,我们看String的源码可以知道,

   55 String的值是通过内部的char[]数组来维护的,

   56 但是这个数据定义的是final类型的,

   57 因此,String的值是不可变的。我们平时修改String的值,

   58 其实是重新new了一个String对象,这个对象的值是: 什么鬼,发生改变了,

   59 并把这个对象的引用地址赋给了a,原来的hello还是在堆中,只是这个值没有被引用,

   60 过段时间会被gc垃圾回收。

   61 */

   63 //4.峰回路转【感觉好像又行了】

   64 System.out.println("---峰回路转【感觉好像又行了】----");

   65 users.setName("测试不同堆地址的对象代码");

   66 users.setAge(666);

   67 Users se=test2(users);

   68 System.out.println(us.getAge());

   69 System.out.println(us.getName());

   70 /*

   71 解析: 修改的是变量在栈中的地址,则不会影响原变量

   72 */

   75 }

   77 //比大小

   78 public static int max(int a,int b){

   79 int result=0;

   81 if(a b){

   82 result=a;

   83 }else if(a b){

   84 result=b;

   85 }else{

   86 System.out.println("两个值相等");

   87 result=0; //两个数值相同 返回0

   88 }

   91 return result;

   92 }

   94 //方法重载: 方法名相同,参数数量、参数顺序、参数类型不同

   95 public static int max(int a,int b,int c){

   96 int result=0;

   98 if(a b){

   99 result=a;

  100 }else if(a b){

  101 result=b;

  102 }else{

  103 System.out.println("两个值相等");

  104 result=0; //两个数值相同 返回0

  105 }

  106 return result;

  107 }

  110 /*

  111 可变参数:用...来表示 例如:int... A;

  112 注意点:1.每个方法中只能存在一个可变参数,而且位置必须在最后一位

  113 */

  114 //遍历排序案例:最大值

  115 public static double printMax(double... A){

  116 double result=A[0]; //将第一个数据拿出来

  117 if(A.length==0){

  118 System.out.println("没有数据");

  119 }else {

  120 //遍历数据,逐个比对

  121 for (int i = 1; i A.length; i++) {

  122 if(A[i] result){

  123 result=A[i];

  124 }

  125 }

  126 }

  127 return result;

  128 }

  135 ////////////////////////值传递与引用传递的案例//////////////////////////

  138 public static String test(String str){

  139 str="测试值传递:java";

  140 return str;

  141 }

  144 public static Users test1(Users users){

  145 //不创建新的对象,现在改变内容,指向同一个堆的地址,使其发生改变

  146 users.setAge(20);

  147 users.setName("唯易");

  148 return users;

  149 }

  152 public static Users test2(Users users){

  153 users=new Users(); //创建新对象,改变存储在栈中的地址;令该对象指向不同的堆的内存中

  154 users.setName("唯易");

  155 users.setAge(20);

  156 return users;

  157 }

  160 }

  162 //外部类【为了演示使用】

  163 class Users{

  164 private String name;

  165 private Integer age;

  167 public String getName() {

  168 return name;

  169 }

  171 public void setName(String name) {

  172 this.name = name;

  173 }

  175 public Integer getAge() {

  176 return age;

  177 }

  179 public void setAge(Integer age) {

  180 this.age = age;

  181 }

  183 }

 

 

  

  以上就是方法和传递(方法传递分为哪两种?)的详细内容,想要了解更多 方法和传递的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: