Java 对象实现copy功能_c++ string 数组

        java 数组是一组连续的存储空间,存储多个相同数据类型的值,特点是类型相同、长度固定。

        有待确定的地方,因为 OC 里 NSMutableArray 可变数组对象可以存储不同数据类型,并且长度也不用在定义时固定,我想 java 应该有相同功能的对象,但我还没学到,所以这篇文章都是按目前的概念来写。

        数组的4要素: 数组名称、数组元素、元素类型、元素下标。

        数组的4种初始化方法,前两种常用。

// 1int[] data1 = new int[5];    // 2int[] data2 = {1, 2, 3, 4, 5};    //3int[] data3;data3 = new int[5];    // 4int[] data4 = new int[] {1, 2, 3, 4, 5};

        各种类型的数组元素默认值。

// 没有默认值int a;     // 0int b[] = new int[5];    // 0.0double[] c = new double[5];    // falseboolean[] d = new boolean[5];    // 空字符char[] e = new char[5];    // 默认值为 nullString[] f = new String[5];    String g = null;// 使用 . 语法时会报空指针的错误;数组为 null,使用 arr.length 时同样会报错// g.equals("dd");

        数组的两种扩容方法。

import java.util.Arrays;// 数组扩容public class test4 {  public static void main(String[] args) {    int[] data = {1,2,3,4,5};        int[] newArr = new int[data.length * 2];        /**     * 1     * System.arraycopy(src, srcPos, dest, destPos, length); 无返回值     * Object src  源数组     * int srcPos  从源数组的下标开始复制     * Object dest 目标数组     * int destPos 从目标数组下标接受值     * int length  从源数组的srcPos开始接收多少长度的数据,注意源数组的srcPos + length 不能大于 src.length,否则数组越界报错     */    System.arraycopy(data, 0, newArr, 0, data.length);    /**     * 2     * Arrays.copyOf(original, newLength); 返回一个新数组     * Object original 源数组     * int newLength 新数组长度     */     int[] newArr2 = Arrays.copyOf(data, 20);        for (int i = 0;i < newArr2.length; i ++) {      System.out.println(newArr2[i]);    }  }}

        基本数据类型和引用数据类型的传递参数。

package com.qf;public class test5 {  public static void main(String[] args) {        int sum = 10;        int[] arr = {10,11,12};        String str = "在吗?";        method1(sum); // 10    method2(arr);  // 100    method3(str);  // 在吗?        System.out.println(sum);    System.out.println(arr[0]);    System.out.println(str);  }    public static void method1(int sum) {    sum = sum + 1;  }    public static void method2(int[] arr) {    arr[0] = 100;  }  public static void method3(String str) {    str = str + "增加";  }}

        基本数据类型是值传递,在函数内部改变后,不会改变函数外面的变量值;基本数据类型以外都是引用数据类型,引用数据类型(String 除外)的传递是内存地址的传递,在函数内改变存储变量的值会改变函数外的变量值。但代码里可以看到,String 也是引用数据类型,并没有改变函数外 String 的值,因为 String 是特例,打印数组的时候,打印的内存地址,打印 String 的时候,跟基本数据类型一样,打印的是值,所以 String 也是值传递。

Java 对象实现copy功能_c++ 数组引用_02

        java 内存分配默认为机器内存的 1/8,基本数据类型存储在栈区,引用数据类型的元素存储在堆区。数组引用变量是一个引用类型的变量,被存储在栈(stack)内存中,实际的数组元素被存储在一组连续的堆(heap)内存空间中。