黑马程序员技术交流社区

标题: Integer 和java 中方法参数传递的几个问题 [打印本页]

作者: 考拉是只猫    时间: 2014-12-3 22:42
标题: Integer 和java 中方法参数传递的几个问题
  1. import java.lang.String;
  2. 2  public class Test {
  3. 3      public static void main(String[] args) {
  4. 4          int[] a = { 1, 2 };
  5. 5  // 调用swap(int,int) 典型的值传递
  6. 6          swap(a[0], a[1]);
  7. 7          System.out.println("swap(int,int):a[0]=" + a[0] + ",   a[1]=" + a[1]); //输出为swap(int,int):a[0]=1, a[1]=2
  8. 8
  9. 9  // ----------------------------------------------------------------------------------------------------------------------------
  10. 10          // 引用传递,直接传递头指针的引用。改变就是改变相应地址上的值
  11. 11          swap(a, 1);
  12. 12          System.out    .println("swap(int [],int):a[0]=" + a[0] + ",   a[1]=" + a[1]); //输出为 swap(int [],int):a[0]=2, a[1]=1
  13. 13  // ----------------------------------------------------------------------------------------------------------------------------
  14. 14          Integer x0 = new Integer(a[0]);
  15. 15          Integer x1 = new Integer(a[1]);
  16. 16          // 调用swap(Integer,Integer)
  17. 17          swap(x0, x1);
  18. 18          System.out.println("swap(Integer,Integer):x0=" + x0 + ",   x1=" + x1); //输出为 swap(Integer,Integer):x0=2, x1=1
  19. 19  // ----------------------------------------------------------------------------------------------------------------------------
  20. 20          // intValue和valueof的区别和联系
  21. 21          // intvalue返回的是int值,而 valueof 返回的是Integer的对象,它们的调用方式也不同
  22. 22          int x = x0.intValue();
  23. 23          Integer s = Integer.valueOf(x0);
  24. 24          /*
  25. 25           * x == s输 出为true 这里面涉及到一个自动打包解包的过程,如果jdk版本过低的话没有这个功能的,所以输出的是false
  26. 26           * 现在新版本的jdk都有自动打包解包功能了
  27. 27           */
  28. 28          System.out.println("compare:int=" + x + ",   Integer=" + s + "  "+ (x == s)); //输出为 compare:int=2, Integer=2 true
  29. 29  // ----------------------------------------------------------------------------------------------------------------------------
  30. 30          StringBuffer sA = new StringBuffer("A");
  31. 31          StringBuffer sB = new StringBuffer("B");
  32. 32          System.out.println("Original:sA=" + sA + ",   sB=" + sB); //输出为 Original:sA=A, sB=B
  33. 33   append(sA, sB); 33 System.out.println("Afterappend:sA=" + sA + ", sB=" + sB); //输出为 Afterappend:sA=AB, sB=B
  34. 34      }
  35. 35      public static void swap(int n1, int n2) {
  36. 36          int tmp = n1;
  37. 37          n1 = n2;
  38. 38          n2 = tmp;
  39. 39      }
  40. 40      public static void swap(int a[], int n) {
  41. 41          int tmp = a[0];
  42. 42          a[0] = a[1];
  43. 43          a[1] = tmp;
  44. 44      }
  45. 45  // Integer 是按引用传递的,但是Integer 类没有用于可以修改引用所指向值的方法,不像StringBuffer
  46. 46      public static void swap(Integer n1, Integer n2) { // 传递的是a 的引用,但引用本身是按值传递的
  47. 47          Integer tmp = n1;
  48. 48          n1 = n2;
  49. 49          n2 = tmp;
  50. 50      }
  51. 51  // StringBuffer和Integer一样是类,同样在方法中是引用传递,但是StringBuffer类有用于可以修改引用所指向值的方法,如.append
  52. 52      public static void append(StringBuffer n1, StringBuffer n2) {
  53. 53          n1.append(n2);
  54. 54          n2 = n1;
  55. 55      }
  56. 56  }
复制代码







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