当前位置:网站首页>数组及其内存管理三问
数组及其内存管理三问
2022-07-29 12:12:00 【妃宫千早】
1 在java中 声明并创建数组的过程中,内存是如何分配的
Java 语言是典型的静态语言,因此 Java 数组是静态的,即当数组被初始化之后,该数组 所占的内存空间、数组长度都是不可变的。Java 程序中的数组必须经过初始化才可使用。所谓初始化,即创建实际的数组对象,也就是在内存中为数组对象分配内存空间,并为每个数组 元素指定初始值。
2 java数组的初始化有几种方式你能说说吗
静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。
动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。
3 基本类型的数组和引用数组类型之间 在初始化时内存分配机制有什么不同吗
对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此基本类型 数组的初始化比较简单:程序直接先为数组分配内存空间,再将数组元素的值存入对应内存里。
引用类型数组的数组元素依然是引用类型的,因此数组元素里存储的还是引用(引用变量),它指向另一块内存,这块内存里存储了该引用变量所引用的对象(包括数组和Java 对象)。
题外
其实 大部分的时候,我们把数组变量和数组对象搞混了,数组变量只是一个引用变量(有点类似于C语言里的指针);而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是在堆内存中创建数组对象也就是 为该数组对象分配一块连续的内存空间,这块连续的内存空间的长度就是数组的长度。
对于很多Java 程序员而言,他们最容易混淆的是:引用类型的变量何时只是栈内存中的 变量本身,何时又变为引用实际的Java 对象。其实规则很简单:引用变量本质上只是一个指 针,只要程序通过引用变量访问属性,或者通过引用变量来调用方法,该引用变量就会由它所 引用的对象代替。
有些书中总是不断地重复:基本类型变量的值被存储在栈内存中,其实这句话是完全错误的。例如,图1.5中的2、5、-12、20,它们都是基本类型的值,但实际上它们却被存储在堆内存中。实际上应该说:所有局部变量都是放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在各自的方法栈内存中的;但引用类型的变量所引用的对象(包括数组、普通的对象)则总是存储在堆内存中。
边栏推荐
猜你喜欢
随机推荐
金仓数据库KingbaseES客户端编程接口指南-JDBC(2. 概述)
WordPress 编辑用户
WPF 实现平移控件
593. 有效的正方形
【一起学Rust | 基础篇】Rust基础——变量和数据类型
【每日SQL打卡】DAY 24丨不同国家的天气类型【难度简单】
金仓数据库KingbaseES客户端编程接口指南-ODBC(6. KingbaseES ODBC 的扩展属性)
How much is the test environment, starting from the actual needs
PL/SQL 集合
TiCDC迁移-TiDB到MySQL测试
Chapter 2 Summary
【多线程】——Callable创建多线程
黑马四小时入门学习记录-2|本地应用
Paddle frame experience evaluation and exchange meeting, the use experience of the product is up to you!
【day04】IDEA、方法
跨域: 汇总
【每日SQL打卡】DAY 23丨向CEO汇报工作的人【难度中等】
爱可可AI前沿推介(7.29)
TiFlash 源码阅读(五) DeltaTree 存储引擎设计及实现分析 - Part 2
DAY 27 丨 daily SQL clock 】 【 every visit to the number of transactions "difficulty difficult - released in advance"







