黑马程序员技术交流社区

标题: 让人头疼的Java中参数的传递问题,同学们有福利了!!! [打印本页]

作者: yuzhouyichen    时间: 2015-10-5 15:28
标题: 让人头疼的Java中参数的传递问题,同学们有福利了!!!
1:Java中的参数传递问题。(理解内存图)
        基本类型:形式参数的改变对实际参数没有影响。
        引用类型:形式参数的改变直接影响实际参数。
                理解:归根结底 是因为 基本类型是存在于栈内存中, 某个方法即使是改变了自己的栈内存的这个基本类型
                        那么等他调用结束了之后 方法本身就会消失 那么不影响原来的main方法中的值
                        而引用类型就不一样了 因为引用类型是存在于堆内存中 我们是通过栈内存里面变量所存储的引用类型的
                        地址值来改变引用类型的,在某个方法内通过地址值改变了堆内存中的引用类型的话 即使是这个方法消失了
                        堆内存中的引用类型已经改变了 所以说形式参数的改变会影响实际参数
  1. public static void main(String[] args)
  2.                         {
  3.                                 int a = 10;
  4.                                 int b = 20;
  5.                                 System.out.println("a:"+a+",b:"+b);//a:10,b:20
  6.                                 change(a,b);
  7.                                 System.out.println("a:"+a+",b:"+b);//a:10,b:20

  8.                                 int[] arr = {1,2,3,4,5};
  9.                                 change(arr);
  10.                                 //{1,4,3,8,5}
  11.                                 System.out.println(arr[1]);//4
  12.                         }

  13.                         public static void change(int a,int b)
  14.                         {
  15.                                 System.out.println("a:"+a+",b:"+b);//a:10,b:20
  16.                                 a = b; //a=20
  17.                                 b = a + b; //b=40
  18.                                 System.out.println("a:"+a+",b:"+b);//a:20,b:40
  19.                                 //return;
  20.                         }

  21.                         public static void change(int[] arr) //{1,2,3,4,5}        --        {1,4,3,8,5}
  22.                         {
  23.                                 for(int x=0; x<arr.length; x++)
  24.                                 {
  25.                                         //如何元素的值是偶数,那么,就把值变为以前的2倍。
  26.                                         if(arr[x]%2==0)
  27.                                         {
  28.                                                 arr[x]*=2;
  29.                                         }
  30.                                 }
  31.                         }
复制代码

作者: 刘小小五    时间: 2015-10-5 23:01
我只是来暧个贴
作者: nesaylo717    时间: 2015-10-5 23:39
我也;来暖一个
作者: Rzzz    时间: 2015-10-5 23:50
还要除去 String 这个类型的特例呀  String是引用数据类型,但在当做参数传值的时候,当基本类型使用..
作者: Rzzz    时间: 2015-10-5 23:51
一看代码就知道是在前期学习,用的是EditPuls写代码!!
作者: outxf003    时间: 2015-10-6 00:10
专业暖贴!哈哈
作者: syusouki    时间: 2015-10-6 01:07
不错 学习了
作者: 且听风_R0pZK    时间: 2015-10-6 07:21
感谢分享!
作者: Synaric    时间: 2015-10-6 09:36
JAVA只有值传递,引用类型拷贝了一个地址,表现上像一个引用传递而已,本质是值传递,记住这个够了
作者: 秦时明月汉时关    时间: 2015-10-6 09:39
还行吧!简单
作者: pan1564335    时间: 2015-10-6 20:24
这个不是很难,值传递和只传递,高司令说了都是值传递
String的话虽然是引用数据类型,但是作为参数列表传递的时候,是和基本数据类型一样的
作者: 915816106    时间: 2015-10-6 21:46
也学习了
作者: 往事如风555    时间: 2015-10-6 21:54
这个有点难




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2