posts - 241,  comments - 116,  trackbacks - 0
          1,一直都在學java是沒有指針的,讓我糾結的是java指針確實是存在的,java數組就是真正的指針。
          以為C語言老師說過C語言里數組就是指針,但是我感覺這句話用在C語言里不是很嚴謹,而用在java里是很恰當的。C語言里的數組是常指針。
          package com.tarena.day05;

          import java.util.Arrays;

          public class Point {

              /**
               *java 指針演示
               */
              static final int arr4[] = { 8, 3, 5, 1, 4, 2, 7 };
              public static void main(String[] args) {
                  //1, 靜態初始化與動態初始化的原理是一樣的
                  int[] arr = { 8, 3, 5, 1, 4, 2, 7 };// 靜態初始化
                  int[] arr2 = new int[] { 8, 3, 5, 1, 4, 2, 7 };// 動態初始化
                  // 因為創建數組的原理是一樣的,都是在堆空間里申請內存并賦值,所以使用也沒有去別
                  arr[0] = 0;//arr = [0, 3, 5, 1, 4, 2, 7]
                  arr2[0] = 0;//arr2 = [0, 3, 5, 1, 4, 2, 7]
                  
                  //2,java數組名就是指針
                  //論據1 使用指針修改原來數組的值
                  int[] arr3 = arr;// arr3 就是java的指針了 相當于 C語言的 int *arr3 = arr;指針arr3指向arr的地址
                  arr3[1] = 0;//使用arr3指針修改arr的1號地址的值,
                  System.out.println(Arrays.toString(arr));// 這時arr = [0, 0, 5, 1, 4, 2, 7]
                  //論據2 使用指針指向新數組的值
                  arr = a();// arr = [2, 1] arr的地址指向了方法a中的變量a在堆空間申請的地址。arr3仍然指向arr的原地址
                  System.out.println(Arrays.toString(arr));// [2, 1]
                  System.out.println(Arrays.toString(arr3));// [0, 3, 0, 1, 4, 2, 7]
                  //論據3 引用傳址
                  swap(arr,0,1);
                  System.out.println(Arrays.toString(arr));// [1, 2]
                  /*
                   * 因此java數組做參數是引用傳址而不是值拷貝,所以說java的數組是指針
                   */
                  
                  //論據4 java數組不是數組
                  /*
                   * c中的數組指向的地址是不能改變的,而c中的指針是可以改變的,然而java的數組恰恰可以改變指向的地址
                   * 所以可以說明java數組就是c指針。
                   * 某位老師說過c數組就是指針其實這樣說并不嚴謹,嚴格說c數組是常指針,因為c數組的地址是不能改變的。
                   */
                  
                  //論據5 java數組可以有常指針但沒有常量
                  /*
                   * 雖然arr4是常指針,但是arr4據有指針的性質,所以arr4里的值是可以改變的。
                   */
                  arr4[0] = 0;//編譯通過 數組的值不是常量
          //        arr4 = arr;//此處編譯不通過 指針arr4是常指針不可以指向新地址。
                  /*
                   * 以上說明java的數組就是指針,所以數組按照指針用是完全可以的。包括,引用傳址,修改堆空間的值,指向新地址等。
                   */
              }
              public static void swap(int a[],int i,int j)
          生活歷程
              {
                  int t = a[i];
                  a[i] = a[j];
                  a[j] = t;
              }
              public static int[] a() {
                  int[] a = { 2, 1 };
                  return a;
              }

          }
          posted on 2011-10-18 10:03 墻頭草 閱讀(2784) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          人人游戲網 軟件開發網 貨運專家
          主站蜘蛛池模板: 滨州市| 大竹县| 阿城市| 白沙| 辽阳市| 湘乡市| 迭部县| 重庆市| 满洲里市| 泗阳县| 泰和县| 多伦县| 麻栗坡县| 景宁| 阿克陶县| 长治县| 钟祥市| 闸北区| 武定县| 赣榆县| 东平县| 吴旗县| 固始县| 自贡市| 时尚| 黄石市| 日喀则市| 左权县| 克东县| 永新县| 红河县| 英德市| 会宁县| 苏尼特左旗| 临泉县| 高青县| 铁岭市| 深州市| 留坝县| 青神县| 芜湖县|