Java中数组、字符串、集合的总结

本文详细介绍了Java中的数组,包括其定义、初始化、使用及内存存储机制。此外,还讨论了引用类型的初始化,并解析了Arrays类中的静态函数。文章通过实例深入探讨了数组与字符串之间的转换方法。
摘要由CSDN通过智能技术生成

数组
一、这些定义让你理解数组更清晰
1、数组既是一种数据结构(用来存储数据的),也是一种数据类型(type[])。
2、是一种数据类型(引用类型),所以创建type[]类型的对象就是创建数组。(“type[]”整体为一个引用数据类型)。数据即可以存储基本类型的数据,也可以存储引用类型的数据,还有字符串,字符串就是存储在数组中的。
3、长度不变性:一旦数组的初始化完成,数组在内存中所占的空间将会固定下来,因此数组的长度不会被改变。因为数组长度不可变的缺点,所以更倾向于用集合处理数据。
4、必须先初始化再使用。
5、继承关系:由于数据中的元素必须是同一类型的,但是java是一种面向对象的语言,而类与类之间是存在继承关系的,所以要求一个数组是水果类型的,但是实际上数组元素可能有苹果,有橘子,有香蕉。所以这是否算是违背了数据类型唯一性呢?显然不是的,因为无论是什么水果都是继承于水果的,所以到头来这个数组还是水果类型的。
二、定义数组以及初始化
1、定义数组:

type[]arrayName;
//这种写法更可以体现type[]是一个整体

2、初始化数组
初始化数组分为静态初始化以及动态初始化。(互逆的操作)
静态初始化:由程序员显示指定每个数组元素的初始值,由系统决定数组长度。
动态初始化:程序员只指定数组的长度,由系统为数据元素分配初始化的值。
下面利用代码演示数组的初始化

1、静态初始化
//定义一个int类型的数组
int [] intArr;
//静态初始化,只指定数组元素值,不指定长度。
intArr=new int[]{
   5,6,,8,20};//这样的初始化格式更可以看出是int[]是一种引用数据类型
//定义一个Object类型的数组
Object [] objArr;
//初始化的时候,初始胡数组元素类型为定义数组时指定的数组元素类型的子类
objArr=new String[]{
   "Java","C++","Android"};
//定义与初始化一起完成(常用)
int[]a={
   5678};
2、动态初始化
//使用动态初始化定义与初始化一起完成
int[] prices=new int[5];
//动态初始化,初始化数组的时元素的类型是定义数组类型的子类。
Object[] books=new String [4];//这也体现了java的多态性
系统分配的初始值按一下规则:
数组元素类型是:(byte,short,int,long)  则数组元素的值是:0
数组元素类型是:(float,double)   则数组元素的值是:0.0
数组元素类型是:char      则数组元素的值是:'\u0000'
数组元素类型是:boolean    则数组元素的值是:false
数组元素类型是:类,接口和数组  则数组元素的值是:null 

3、注意:不要同时使用静态初始化和动态初始化,也就是说不要在数组初始化的同时,即制定数组的长度又为每个数组分配初始值。
三、数组的使用
1、利用下标来对数组进行取出和赋值(太简单了,就不举例了)。
2、数组的length属性。(觉得属性一词用的准确,因为数据本身是一个引用数据类型,也就是一个类,一个类当然有他的属性,而且它的类也可以调用它的属性)如下:

int[] intArr={
   5,6,7,8};
intArr.length;//把intArr当成数组对象来看。对象调用属性。最后的值是4

3、foreach循环
(1)foreach循环的优势:无需获取数组或者集合的长度,无需根据索引来访问数组元素和集合元素,无需循环条件和迭代条件,froeach会自动遍历数组和集合的每个元素,当每个元素都被迭代一遍的时候,foreach循环会自动退出

String[] books=new String[]{
   "java","C++","Android"};
for(String book:books)
{
   
   System.out.println(book);
   //book相当于一个临时变量,系统会把元素依次的赋给这个临时变量,这个临时变量并不是数组,只是保存数组的值,所以不可以通过这个临时变量来改变数组的值。而且不要对这个临时变量赋值
}

四、数组在内存中的存储机制
1、数组是一个引用数据类型,数组变量只是一个引用,所以数据变量和数据具体元素在内存中是分开存放的。
例如

int[]intArr={
   5,6,7,8};
变量名(intArr)是存放在栈内存中的,数据元素(5678)是存放在堆内存中的。

原因:(1)当一个方法开始执行时,每个方法都会建立自己的栈内存(stack),在这个方法里定定义的所有变量都会依次存放在这个栈中,随着方法的执行完毕,这个栈内存也会自然销毁,所以所有在这个方法中定义的局部变量都会存放在这个栈内存中。
(2)在程序中创建一个对象的时候,这个对象会被保存在堆内存(heap)里,堆内存中的对象不会随方法的结束而销毁,即使这个方法结束了,这个对象还是可能被另一个引用变量所引用(参数传递)。只有当这个对象没有任何引用变量引用它时,才会被垃圾系统回收器所收回。
2、定义一个数组并且把它初始化后,其实是在内存中分配了两个空间,一个用于存放数组的引用变量(stack),另一个用于存放数组本身(heap)。
3、

int[] a={
   5,6,7,8};
int[] b={
   6,6,7}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值