数组和字符串
为了简化定义多个类似功能的变量,使程序方便简单,可以使用数组变量
数组
1.两种定义方式
(1)动态(指定长度)
格式:数组datatype [ ] 数组名 = new datatype [长度];
(2)静态(指定元素)
格式:数组datatype [ ] 数组名 = new datatype[ ]{元素1,… ,元素n};
or 数组datatype [ ] 数组名 = {元素1,… ,元素n};//省略格式,必须在声明同时赋值。
注意
不可同时指定长度和元素,但是系统会自动计算长度,如果你给出了他的元素。
声明:即是(向编译器)说明变量的类型和名称的过程,(只作用于编译器)不分配存储空间。例:int a;/类 对象名;
定义:声明变量并且进行初始化的过程,分配存储空间。例:int a = 0;/类 对象名 = new 类();
数组长度一旦确定就无法改变,数组是定长的。
2.一维数组 与 二维数组
声明:
一维,
datatype name [ ] or datatype [ ] name.
int age[ ];int [ ] age;//仅变动方括号位置。
初始化同上(定义数组)。
二维,
比一维多出一个[ ],多维类推。java和c语言中含有多维数组。
n维数组的元素是n-1维数组。
Example.
int [ ] [ ] name = new int [m] [n] ;
even
int [ ] name [ ] = new int [m] [n];//属于是方括号随便移动了。动态
datatype [ ] [ ] name = {{元素1,元素2},{元素1.元素2},…};静态
动态初始化指定长度。
静态初始化指定元素。(系统自动计算长度)(相当于静态定死了,是所以是static的)
所以,相当于是都指定了长度(数组长度确定不变)
只是元素是否已知,非随机数,静态则已知,动态则等待赋值。
3.访问数组元素。
靠下标访问(从0开始)
int a[3];
a[2] = 0;//把a中第三个元素赋值为0;
4.数组参数方法
void func(int *a);
void func(int a[]);
void func(int a[3]);
有三种方式,使用数组做参数时,编译器会自动将数组名转化为指向数组第一个元素的指针。
可知编译器不知道数组a有多少个元素。even不知道是否是数组,只知道是指针,按地址然后按位读取?
复制数组只能一个元素一个元素地来,逐个复制,不可整体copy。
字符串
1.不变字符串类String
java中用String类的构造方法来穿件字符串变量。
常用构造方法如下:
(1)用String()方法创建String对象:
String s = new String(" ");//里面直接填内容
(2)用String(char a[ ])方法创建String对象:
char a [ ] = {‘a’,‘b’,‘c’};
String s = new String(a);
(3)使用String(char a[ ],int offset, int length)方法创建对象;
char a[ ] = {‘a’,‘b’,‘c’,‘d’};
String s = new String(a,1,3);
以上代码等价于String s = new String(“bcd”);a是对象数组,offset是开始截取字符串的位置,length表示截取后所得字符串的长度。
2.连接
字符串和字符串或者是其他datatype都可以直接用+号来实现连接,但返回结果是字符串类型。
常见于print的输出。
3.获取字符串信息
String s = “asdf”;
System.out.println(“字符串的长度为”+s.length( ) );
检索字符位置
,indexOf() 和 lastIndexOf( ),检索位置,一个是首次,一个是最后一次。
in dex Of 和 last In dex Of,也是驼峰命名法。
Example
System.out.println( name.indexOf(“s”));//检索s在字符串变量name中的首次出现位置。
X.字符串缓冲区类StringBuffer
StringBuffer构造方法
构造一个其中不带字符的字符串缓冲区。初始容量为16个字符。
append(char[ ] str)——将数组参数的字符串添加到次序列后。
append(“hh”);//或者字符数组名。
name.replace(1,4,“cast”);//置换原字符串变量指定内容,从1到4,(依旧是从0开始,正常);
(name 可以没有5个长度,关键是cast有4个长度,得占用那么多);
String与StringBuffer的区别
String字符串常量,StringBuffer字符串变量。
运行速度StringBuffer>String。因为String对象一旦创建就不能更改,java中对对象的操作实际上是
回收旧的,创建新的String常量。
StringBuffer的对象是变量,是可以更改的。所以运行更快。
String用于少量字符串操作的情况。StringBuffer用于多线程下在字符缓冲区进行大量操作的情况。
·