zoukankan      html  css  js  c++  java
  • Java提高——数组与内存控制

    Java数组是静态的,即初始化之后数组长度不可变。初始化就是为数组对象分配内存空间,并为每个数组元素指定初始值。

    数组的初始化(两种方式):1、静态初始化:人定值,系统定长;2、动态初始化:人定长,系统定值。(使用时不要同时指定两种初始化

    public class ArrayTest {
        public static void main(String[] args) {
            //静态初始化
            String[] books = new String[]{
                    "java","c","c++","python"
            };
            //动态初始化
            String[] names = new String[3];
            //通过length属性访问长度
            System.out.println(books.length+" "+names.length);
        }
    }

    数组在内存中的示意图:

    Java数组是一种引用类型的变量,数组变量不是数组本身,它只是指向堆内存中的数组对象。

    public class ArrayTest {
        public static void main(String[] args) {
            //静态初始化
            String[] books = new String[]{
                    "java","c","c++","python"
            };
            //动态初始化
            String[] names = new String[3];
            //通过length属性访问长度
            System.out.println(books.length+" "+names.length);
    
            names = books;
    
        }
    }
    执行name = books之后内存中的情况:

    数组的初始化并不是对数组变量的初始化,而是对数组对象的初始化——也就是为数组在内存中分配一块连续的内存空间,内存空间的长度就是数组的长度。

    所有局部变量都是存放在栈区(不管是基本类型的变量还是引用类型的变量),但引用类型变量所引用的对象则总是存放在堆内存中(包括数组,普通Java对象),堆内存中对象一般不允许直接访问,为了访问则需要通过应用变量。

    基本类型数组的初始化:

    public static void main(String[] args) {
        //定义一个数组
        int[] arr;
      //静态初始化  
      arr = new int[]{1,2,3};
    }

    内存中的示意图:左边为定义了arr数组,右边为静态初始化后


    引用类型初始化

    public class Person {
            int age;
            double height;
    
        public static void main(String[] args) {
            //定义一个数组
            Person[] student;
            //执行动态初始化
            student = new Person[2];
            //创建一个实例,并将这个实例赋给zhang
            Person zhang = new Person();
            zhang.age=12;
            zhang.height=160;
            Person li = new Person();
            li.age=10;
            li.height=120;
            //将zhang和li都给student
            student[0]=zhang;
            student[1]=li;
        }
    }
    
    定义一个student引用变量和动态初始化

    创建两个Person实例和将两个实例给student后





  • 相关阅读:
    C# 连接数据库
    MySQL数据类型char与varchar中数字代表的究竟是字节数还是字符数?
    group by与avg(),max(),min(),sum()函数的关系
    MySQL内连接、外连接、交叉连接
    Mysql 插入中文错误:Incorrect string value: 'xE7xA8x8BxE5xBAx8F...' for column 'course' at row 1
    session和token
    session和cookies
    sessionid如何产生?由谁产生?保存在哪里?
    跨域,你需要知道的全在这里
    匈牙利算法模板
  • 原文地址:https://www.cnblogs.com/huangzhe1515023110/p/9276102.html
Copyright © 2011-2022 走看看