目录
四、String、StringBuffer、StringBuilder之间的差异与适用场
#数组
1.数组的基本概念
数组是一组类型相同的数据的集合;也就是说,数组中可以存储多个数据,但是这些数据的类型必须相同;
2.数组的声明、创建与初始化
3.数组的使用
注意:
1)数组的索引是int类型,从0开始,索引最大值和数组长度始终差1;
2)数组的长度是属性,String的长度是length();
3)创建数组的时候必须指定数组的长度,而且一经定义则不允许改变;
4)数组的长度虽然是5,但是在内存中实际给6个位置,另外一个存储的是长度5。
4.数组的遍历方式
很多时候我们需要对数组中的元素一个一个取出来使用,这个过程叫遍历;先简单理解数组遍历的循环语句,包括传统的for循环和增强for循环两种;
5.数组常见问题
6.数组工具
1)Java API中有一个类 Arrays,定义大量的sort方法,可以对数组中元素进行排序;
2)Java API中有一个类 Arrays,定义大量的binarySearch方法,可以对数组中元素进行查找;
注意:binarySearch利用二分查找法,所以数组必须是有序的
#Java字符串
一、String类
java类库是Java语言提供的已经实现的标准类的集合,是Java语言的API,利用这些类库可以方便地实现各种功能
Java包分为二大类:包名是java开头的核心包 包名是javax开头的扩展包
java.lang包中,程序不需要引入此包,就可以使用包中的类 此包常用类:
这三个类的特点:都被final修饰,它们是不能被其他类继承的
1.创建字符串的三种方式
1)String 变量名 = "值";
2)String 变量名 = new String("值");
3)char[] ch = new char[]{'字符1','字符2'};
String 变量名 = new String(ch);
示例:
public class demo {
public static void main(String[] args) {
char[] ch = new char[]{'a','b','c'};
String str = new String(ch);
System.out.println(str);
System.out.println(str.charAt(1));
}
}
运行结果:
abc
b
2.String字符串特点
字符串可以用两种方式赋值,且有一个非常重要的特征,即不可变性(immutable);
不可变的意思是:一旦一个字符串被创建后,它的值就不能被修改;
示例:
public class demo {
public static void main(String[] args) {
String s1="Hello";
s1="World";
System.out.println(s1);
}
}
运行结果:
World
上述代码的执行过程如下:
注意:
并不是把Hello改为了World,而是重新分配空间存储World;
s1的值发生了改变,指向了新的空间;
3.equals方法
equals方法 :比较内存地址(虚地址)
注意: String类 重写了equals方法比较属性值
比较两个对象内容是否相等,需要重写equals方法。
注意:== 和 equals区别? == 针对引用类型比较地址
- object中equals方法仍然比较的是地址
- String类中equals比较的是值。
二、StringBuffer类
Java语言中的有一个StringBuffer类,称为字符串缓冲区。
StringBuffer类用于处理可变的字符串,StringBuffer对象的内容是可以扩充和个修改的,当生
成一个StringBuffer对象后,也可通过toString()方法将其转换为String对象。
StringBuffer类特点:
- 长度是可变的
- 接收不同类型数据,最终要转成字符串进行使用
- 可以对字符串过进行修改
StringBuffer类之所以能进行多种修改字符的操作,原因就是它使用了缓冲区。
public class demo {
public static void main(String[] args) {
//构建一个StringBuffer的对象,初始容量为16个字符
StringBuffer buffer = new StringBuffer("abc");
System.out.println(buffer);
//获取buffer对象的容量
System.out.println(buffer.capacity());
//将指定字符串追加到该字符串的末尾
buffer.append("pp");
System.out.println(buffer);
//将字符串插入到字符串指定的下标位置
buffer.insert(3,"好的");
System.out.println(buffer);
}
}
运行结果:
abc
19
abcpp
abc好的pp
证明:StringBuffer是一个可变的字符串类
三、StringBuilder类
java语言中的有StringBuilder类也代表可变字符串对象。
实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。
* StringBuilder 和 StringBuffer的区别:
* StringBuffer 线程安全,效率相比较低,StringBuilder 不安全,效率相对较高.
四、String、StringBuffer、StringBuilder之间的差异与适用场景
Java语言中的还有一个StringBuilder类,与StringBuffer兼容,但是不保证线程同步;
三个类的区别:
- String类是不可变的,对象一旦被创建,就不能被修改;可以使用=直接赋值,此时使用常量池;也可以使用new创建,不使用常量池;
- StringBuffer是可变的,对象创建后,可以修改;必须使用new关键字;
- StringBuilder是不同步的,在单线程情况下使用比StringBuffer高效;必须使用new关键字;