学习java第七天#越努力越幸运#_数组
Java学习之数组(array)
定义:数组是相同数据类型的有序组合,数组也是对象,数组元素相当于对象的成员变量。
数组的长度确定,是不可变的。
1、数组的声明
eg:int[] a;
int a[];
2、数组的初始化(三种方式)
①int[] a = new int[3]; //通过new出来的都放在堆里面
a[0] = 23; //数组长度为3,长度不能长于3
a[1] = 26;
a[2] = 85;
②动态
a.length 是数组a的长度。
③静态
简单例子:int [i] = {45,84,43};
3、String 类的常用方法:jdk的源码分析
在jdk源码中,有很多函数的编码,按住ctrl键左击鼠标便可以出来源码。
下面便是看源码的出的部分结论:
①替换字符串中的某个字符
String str1 = String(”ekdsf“)
String str - str1.replace(‘e’,‘w’):
运行结果为:wkdsf
②equals和”==“的区别
相同点:他们都是比较,当比较发现相同时,为true,当比较发发现不同时,为false
不同点:
equals:比较的是内容
==:比较的是地址
eg: (a)
由于str1和str2都是new出来的,虽然内容一样,但地址不一样
所以:运行之后为:true
false
eg (b)
str3 和str4 都不是new出来的,他们内容相同,地址也相同
所以:运行之后为:true
false
③ String 内存问题
我们看下面这个例子
下面是str6的内存图:
所以运行之后的结果为:a012
可以看出,在堆区产生了3+1个对象,很占内存,不好,一般不用这种方式字符串。
改善方法:
我们知道,String是不可变字符序列,那有没有可变的字符序列呢
这就要介绍两个新函数了:Stringbuilder(重点)和StringBuffer。它们都是可变字符序列
StringBuilder:线程不安全,效率高
StringBuffer:线程安全,效率低
StringBuilder默认长度为16,当StringBuilder(”hs“)的长度=本身的字符串长度+16;
#### append:追加
运行结果为:abcdefh
也可以叠加追加:
这是因为源码中append后面有return this,所以可多次追加。
append:有扩容功能,不用担心内存不够
比如建立的时候内存为17,但可以新建一个为2*n+2的内存替换原来的内存,大大减少了内存
eg
虽然运行结果和一样,但是却比他更加节省内存空间。
在看java中的Array源码包时,可以了解到:
(Ⅰ)Array.toString 肢解打印数码顺序(从小到大);
(Ⅱ)Array.fill(a,2,4,100) //将[2,4)里的元素替换为100;
4、上述讲的数组都是一维数组,那下面来聊聊二维数组吧!!
a、二维数组的声明
举个例子:int[][] a = new int[][]
b、二维数组的初始化(有两种方式)
第一种:
第二种:
由此可见,第一种初始化方式比较简单明了,我们通常采用第一种方式。
c、二维数组的内存分析(草图)
到了最后补充一点:
for (int m:a){
System.out.println(m);
}
它的意思是,将长度为a的一维数组依次打印出来,结果和下列程序的运行结果一样:
for(int i = 0;i<a.length;i++){
int m = a[i];
System.out.println(m);
}