java学习笔记1--数组初始化时的内存分配
来源:互联网 发布:js格式视频 编辑:程序博客网 时间:2024/04/30 16:25
最近在看一本李刚老师的书《java程序员的基本修养》,看了之后突然觉得自己虽然用了两年的java却实际上根本不了解java
下面就来分享一下学习经历吧!
有如下几个问题:
1.在java中,声明并创建数组的过程中,内存是如何分配的?
2.java数组的初始化一共有哪几种方式?
有如下程序:
class JavaTest{ //数组的内存分配 public static void main(String[] args){ //数组初始化有两种方式,一种是静态初始化,一种是动态初始化 //静态初始化第一个数组 String[] books = new String[]{ "java程序设计", "C程序设计", "C++程序设计" }; //动态初始化第二个数组 String[] names = new String[5]; //初始化数组时,数组变量books和names保存在栈内存中,他们的值只是指向数组对象的地址, //而数组对象保存在堆内存中 System.out.println("第一个数组的长度:"+books.length);//3 System.out.println("第二个数组的长度:"+names.length);//5 //此时在内存的分配如图1.1所示 //注意: //1、不要同时使用静态初始化和动态初始化 //2、数组元素的内存空间分配结束之后程序只能改变数组的值,而无法改变数组的长度,但有如下情况 //将数组books赋给names names = books; System.out.println("改变后的第二个数组的长度:"+names.length);//3 //注意:这里确实改变了长度,但是原本初始化的第二个数组对象并没有改变,改变的是names这个变量, //如图1.2所示,names变量重新引用了第一个数组对象,这样造成的数组可以改变的假象 } }
3.基本类型数组和引用类型数组之间,在初始化时的内存分配机制有什么区别?
上面讲的是基本类型数组的初始化,接下来讲讲引用类型数组的初始化
有如下程序
class Person{ public int age; public String name; public void info(){ System.out.println("我的名字:"+name); }}class ReferenceArray{ public static void main(String[] args){//动态初始化一个引用类型数组 Person[] students; students = new Person[2]; //此时内存分配如图1.3所示 System.out.println("students所引用的数组的长度是:"+students.length); //创建一个Person实例 Person zhong = new Person(); zhong.age=20; zhong.name="joffy"; //创建另一个Person实例 Person lee = new Person(); lee.age=21; lee.name="david"; //此时内存分配如图1.4所示 //将两个person实例赋给students数组 students[0]=zhong; students[1]=lee; //students数组保存的仍然是一个引用,指向另一块内存,该内存保存zhong和lee对象 //调用info方法 lee.info();//david students[0].info();//joffy}}
以上就是本次介绍的内容,如果有错的地方欢迎补充讨论
0 0
- java学习笔记1--数组初始化时的内存分配
- java数组的初始化与内存分配
- Java学习笔记1:基本内存的分配
- JAVA 学习笔记-内存分配
- JAVA学习笔记--内存分配
- JAVA学习笔记-数组的初始化方式
- [javase学习笔记]-5.2 数组的内存分配及特点
- Java学习笔记-数组的静态初始化和动态初始化
- Java笔记之数组及内存分配
- 二维字符串数组的初始化-动态内存分配
- 二维字符串数组的初始化-动态内存分配
- 二维字符串数组的初始化-动态内存分配
- java数组内存分配
- android学习笔记:java中的内存分配
- 学习笔记—java中的内存分配
- Java基础-数组的内存分配
- Java多维数组的内存分配
- java数组的定义和内存分配
- stringstream的用法
- Windows Server 2003 共享文件夹权限设置
- App Icons on iPad and iPhone
- ListView中的手势问题
- JSONObject与JSONArray的使用
- java学习笔记1--数组初始化时的内存分配
- F7 - Full Featured HTML Framework For Building iOS7 Apps(Framework7开源轻量级HTML框架)
- 【Unity3D自学记录】Unity3D之KeyCode键值
- 关键段,事件,互斥量,信号量的“遗弃”问题
- Apache模块动态加载和静态加载
- 限定字符串的最大字节数
- 春季爱车保养注意事项
- 看C#源代码遇到的问题与感悟
- Hadoop2.2.0完全分布式集群平台安装与设置