Java数组笔记

# 数组--------内存 #

2017/8/31 15:29:19 

## 数组(容器) ##
- 为了存储同种数据类型的多个值
- 概念
    - 数组是可以存储同一种数据类型多个元素的集合,也可以看成是一个容器
    - 数组既可以存储基本数据类型,也可以存储引用数据类型
- 格式
    - 数据类型[] 数组名 = new 数据类型[数组的长度];
    -    int[]  arr = new int[5];
    - 数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
    -    int[] arr = new int[]{11,22,33,44,55};---------数组长度为5
- 数组初始化
    - 为数组开辟连续的内存空间,并为每个数组元素赋予值
        - 动态初始化:只指定长度,由系统决定初始化值
            -   int[] arr = new int[5];
            -  
            1. 整数类型:byte,short,int,long,默认初始化值都是0
            2. 浮点类型:float,double,默认初始化值为0.0
            3. 布尔类型:Boolean默认初始化值为false
            4. 字符类型:char初始化值为‘\u0000’    -------char在内存中占两个字节,是16个二进制位,    \u0000----每一个0代表十六进制的0,四个0就是十六个二进制位
        - 静态初始化:给出初始化值,由系统决定长度
            -  数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
            - ` int[] arr = new int[]{11,22,33,44,55};`  先声明,后赋值
            -  `int[] arr = {11, 22,33,44,55}; ` 声明和赋值在一行
   
                    ` int[] arr;

                    arr = new int[]{11,22,33,44,55};
            
                    int[] arr2;
                    arr2 = {11,22,33,44,55}    //会报错,,,声明和赋值必须在一行
                    `
            
## 栈 ##
- 存储局部变量---
    - 局部变量:定义在方法声明上和方法中的变量
        - int x = 10;
## 堆 ##
- 存储new出来的数组或对象(新创建)
## 方法区 ##
-面向对象-
## 本地方法区 ##
-和系统相关
## 寄存器 ##
- 给CPU使用(.class)

## 一个数组的内存图解 ##
![](http://i.imgur.com/HCpk6gu.png)

# 二维数组 #

    `        int[][] arr = new int[3][2];                        //定义二维数组
        System.out.println(arr);            //二维数组                                    [[I@15db9742
        System.out.println(arr[0]);            //二维数组中第一个一维数组                    [I@6d06d69c
        System.out.println(arr[0][0]);        //二维数组中第一个一维数组的第一个元素        0

    
    /*
    //int[][] arr = new int[3][2];    
    //以下两种也是表示数组的格式
        int arr[][] = new int[][];
        int[] arr[] = new int[][];

        int x;
        int y;
        int x,y;
        
        int[] x;
        int[] y[];

        int[] x,y[];                //x是一维数组,y是二维数组
        */`

**int[][] arr = new int[3][];**

----------二维数组中有三个一维数组

赋值::
        
        `arr[0] = new int[3];
        arr[1]    = new int[5];
        `
##二维数组遍历##
外循环控制二维数组的长度,其实就是一维数组的个数;

内循环控制一维数组的长度。


    `class Demo2_Array {
        public static void main(String[] args) {
            int[][] arr = {{1,2,3},{4,5,6},{4,3}};
            System.out.println(arr);
            System.out.println(arr[0]);
            System.out.println(arr[0][0]);

            bianli(arr);    
        }
        public static void bianli(int[][] arr){
            for (int i = 0; i < arr.length ;i++ ){            //i代表每一个二维数组中的一维数组
                for (int j = 0;j < arr[i].length ;j++ ){
                    System.out.print(arr[i][j] + " ");
                }    
                System.out.println();
            }
        }
     }`


# java中的参数传递 #

1. 基本数据类型的值传递,不改变原值,因为调用后就会弹出栈,局部变量随之消失。
2. 引用数据类型的值传递,改变原值,因为即使方法弹出栈,但是堆内存数组的对象还在,可以通过地址继续访问。

*两种说法:

1、Java中既是传值,也是传址,基本数据类型传递的值,引用数据类型传递的地址

2、Java中只有传值,因为地址值也是值*

posted @ 2017-08-31 20:39  penge_Array  阅读(140)  评论(0编辑  收藏  举报