目录
2.3.9 【子字符串在当前字符串第一次出现处的索引(下标)】
2.3.10 【子字符串在当前字符串最后一次出现处的索引(下标)】
3.5 StringBuffer和StringBuilder的区别
1、Array工具类
数组工具类:Java.utill.Arrays
1.1 排序:
Arrays.sout(数组名)
1.2 二分法查找:
int index = Arrays.binarySearch(数组名,查找的数)
返回值是元素的下标,若不存在则为-1
2、String类
2.1 String字符串的存储原理
关于Java JDK中内置的一个类:java.alng.String
1)String表示字符串类型,属于引用数据类型,不属于基本数据类型
2)在java中随随便便用双引号括起来的都是String对象
3)java中规定,双引号括起来的字符串是不可变的
4)JDK当中双引号括起来的字符串存储在方法区的"字符串常量池"当中的【字符串使用过于频繁,提高效率】
5)String类当中已经重写了equals()方法,直接调用即可
public class Text{
public static void main(String[] args){
//下面程序一共创建了三个对象,字符串常量池当中"xyz"
堆内存当中两个对象,因为new两次
String x = new String("xyz");
String y = new String("xyz");
System.out.println(x == y);//false
String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2);//true
//所以直接直接赋值和创建对象的字符串比较结果是不同的,所以要通过equals()方法进行比较
System.out.println("hello".quals(s1));//建议采用这种方法,避免了空指针异常
System.out.println(s1.equals("hello"));//存在空指针异常的风险
//i保存的是100
int i = 100;
//s保存的是字符串对象在字符串常量池当中的内存地址
String s = "abc";
}
}
2.2 String类常用的构造方法
1)String s = new String(" ");
2)String s = " ";(最常用的方法)
3)String(byte数组);【将byte数组全部转换为字符串】
byte[] bytes = {97,98,99};//97是a,98是b,99是c
String s2 = new String(bytes);
s2的输出结果为"abc";
4)String(byte数组,起始下标,长度);【将byte数组一部分转换为字符串】
byte[] bytes = {97,98,99};//97是a,98是b,99是c
String s3 = new String(bytes,1,2);
s3的输出结果为"bc";
5)String(char数组);【将char数组全部转换成字符串】
Char[] chars = {'我','是','中','国','人'};
String s4 = new String(chars);
s4的输出结果为"我是中国人"
6)String(char数组,起始下标,长度);【将char数组一部分转换为字符串】
Char[] chars = {'我','是','中','国','人'};
String s5 = new String(chars,2,4);
s5的输出结果为"中国人"
2.3 String常用的方法
3、StringBuffer
3.1 在字符串拼接时的资源浪费
若采用下列代码,贼会占有大量的内存区空间,造成内存空间的浪费
String s = "abc";
s += "hello";
就以上两行代码,就导致在方法区字符串内存池当中创建了三个对象:
"abc","hello","abchello"
3.2 优化程序引入StringBuffer
public class String1 {
public static void main(String1[] args) {
//创建一个初始化容量为16个byte[]数组(字符串缓冲区对象)
StringBuffer stringBuffer = new StringBUffer();
//拼接字符串,以后拼接字符串统一调用append()方法
stringBuffer.append("a");
stringBuffer.append("b");
stringBuffer.append("d");
stringBuffer.append(3.14);
//append方法底层在进行追加的时候,如果byte数组满了,会自动扩容
stringBuffer.append(100L);
System.out.println(stringBuffer.toString());
//System.out.println(stringBuffer);
}
}
3.3 如何优化StringBuffer的性能
1)在创建StringBuffer的时候尽可能给定一个初始化容量
2)最好减少底层数组的扩容次数。预估计一下,给一个合适的较大的初始化容量,提高程序的执行效率
StringBuffer sb = new StringBUffer(100);
3.4 优化大量字符串的拼接的程序
建议使用JDK自带的:java.lang.StringBuffer和java.lang.StringBuilder
3.5 StringBuffer和StringBuilder的区别
StringBuffer方法都有:sychronized关键字修饰。表示StringBuffer在多线程环境下运行是安全的
StringBuilder方法都没有:sychronized关键字修饰。表示StringBuilder在多线程环境下运行是不安全的