第六章 数组
堆和栈:
堆
存储的是对象,每个对象都包含一个与之对应的class
JVM只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定
栈
每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象)
每个栈中的数据(原始类型和对象引用)都是私有的
栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)
数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会自动消失
方法区
静态区,跟堆一样,被所有的线程共享
方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量
public static void main(String[] args) {
int score1= 90;
int score2=90;
int score3=88;
int[] scores={10,20,30,40};
int[] inscors=new int[10];
System.out.println(inscors[0]);
System.out.println(inscors[1]);
System.out.println(inscors[2]);
System.out.println(inscors[3]);
System.out.println(inscors[4]);
System.out.println(inscors[5]);
System.out.println(inscors[9]);// 索引的最大值=数组的长度-1
for (int i = 0; i < 10; i++) {
inscors[i]=i+1;
System.out.println("当前的索引是:"+i+",当前位置的值是:"+inscors[i]);
}
}
==和equals的区别:
==:当比较的是基本数据类型的时候比较是他们对应的数值
当比较的是对象的时候比较的是对应的内存地址(引用地址、对象地址)是否相同
equals:
基本数据类型类型不能使用equals,当比较对象(引用数据类型)的时候比较的是内存地址,当比较字符串的时候比较的是内容(String类重写了equals的方法
数组:数组的作用就是存储一组数据。
数组:开辟的是一个连续空间,根据下标操作每一个小空间。
java的数组空间是固定的,一经开辟不可更改。
每一个格子中放的内容必须一致。
java数组:定数据类型 定长度 一经定义不可更改
数组的声明格式以及初始化:
声明一个数组:
数据类型[] 数组名(变量名);
给数组赋值:仅仅只是空间开辟
数组名=new 数据类型[长度];
数据类型[] 数组名(变量名)=new 数据类型[长度];--这是开辟一个初始长度的数组,但是小格子中没有内容保持默认。数字为0 引用为null boleanfalse。
声明同时直接初始化:即开辟连续空间并且每一个格子中都显示赋值。
数组类型【】 变量={};
数据类型[] 变量名=new 数据类型[]{};
Arrays工具类:
java.util包提供了许多存储数据的结构和有用的方法
Arrays类提供许多方法操纵数组,例如:排序,查询
Arrays类的sort()方法: 对数组进行升序排列
Arrays.copyOf()用法,这个方法是将原数组快速复制成一个新数组。如果新数组的长度小于旧数组的长度,将截取一部分旧数组中的元素,复制给新数组。