JAVA学习笔记五之(1)数组
一、java内存分配
1、java针对程序的内存分配问题:
不同内存地方的处理程序的效率不同。
2、java内存分配:
(1)、栈(Stack):
A:局部变量
局部变量:
在方法的定义中,或者方法声明上的变量都叫局部变量。
局部变量的使用,必须先声明,初始化,然后使用。
B:方法的调用
C:注意:
1、局部变量的数据没有初始化值。
2、当方法调用完毕,局部变量就消失。
(2)、堆(Heap):
所有被new出来的东西。
A、都有首地址值。
B、堆内存的数据有默认初始化值:
整数:0
浮点数:0.0
字符:’\u0000’
布尔类型:false
String类型:null
C、只要有栈内存的引用指向堆内存的数据,堆内存的数据就一直存在。如果想它不存在,把这个指向去掉就ok。
不用但心垃圾回收的问题。因为java语言会自动进行垃圾回收。垃圾回收的时候,是在不确定的时间上。
当jvm内存不够,jvm还得要空闲的时候。
(3)、方法区:(面向对象讲解)
(4)、本地方法栈:(操作系统的一些资源)
(5)、寄存器:(CPU要使用)
二、数组
1、数组的定义:
存储多个同一种数据类型的多个元素容器。
2、数组的特点:
数组中每一个元素进行编号,方便我们查找到每一个元素。
注意:编号是从0开始。
如何查找呢?
数组名[编号]。就表示获取的是第(编号+1)个元素。
3、数组的定义格式:
数据类型[] 变量名 = new 数据类型[个数];
解释:
左边:
int:说明我定义的数组的元素类型。
[]:说明是一个数组。
intArray:是数组的名称。
右边:
new:创建对象,创建实例。所有的实例都是通过new关键字做的。
通过new出来的数据和不new出来的数据存储位置不同。
int:说明数组中的元素的数据类型。
[]:说明是数组。
3:说明数组中的元素个数。
念法:
定义了一个int数组类型的变量intArray,里面有3个int类型的元素。
另外的一种写法,意思和这个比较类似:
int intArray[] = new int[3];
class ArrayDemo1 {
public static void main(String[] args) {
//数据类型[] 变量名 = new 数据类型[个数];
int[] intArray = new int[3];
System.out.println(intArray); //[I@79f1d448 -- 这是该数组在内存中的地址值
System.out.println(intArray[0]); //0 -- 获取数组中的第一个元素的值
}
}
4、数组的内存图解
(1)、一个数组的内存图解
(2)、两个数组的内存图解
(3)、多个栈内存的引用变量指向同一个堆内存地址
class ArrayDemo2 {
public static void main(String[] args) {
//定义第一个数组
int[] intArray = new int[3];
intArray[0] = 1;
intArray[1] = 2;
intArray[2] = 3;
System.out.println(intArray[0]);
System.out.println(intArray[1]);
System.out.println(intArray[2]);
System.out.println("-------------");
//定义第二个数组
int[] intArray2 = new int[3];
intArray2[0] = 1;
intArray2[1] = 2;
intArray2[2] = 3;
System.out.println(intArray2[0]);
System.out.println(intArray2[1]);
System.out.println(intArray2[2]);
//比较
System.out.println(intArray == intArray2); //false
System.out.println("-------------");
//定义第三个数组
int[] intArray3 = intArray; //两个栈内存的变量指向同一个数组
intArray3[0] = 10;
intArray3[1] = 20;
intArray3[2] = 30;
System.out.println(intArray3[0]);
System.out.println(intArray3[1]);
System.out.println(intArray3[2]);
System.out.println(intArray[0]);
System.out.println(intArray[1]);
System.out.println(intArray[2]);
//比较
System.out.println(intArray == intArray3); //true
}
}