java基础笔记-常用类1 字符串


七 Java常用类

1. 字符串相关的类

1.1 String类

? final的,suoy

? 里面实际是一个private final byte[ ] value;//之前还是char类型呢,现在就是byte了

实现了接口:

? serializable,表示字符串是支持序列化的

? Comparable,可以比较大小

? CharSequence

1.1.1 构造器

String s1="sd";
String s2= new String();
String s3=new String(String original); //创建了俩对象,堆空间里new一个,另一个是byte[]对应的常量池里的数据“xxx”
String s4= new String(char[] a);
String s5=new String (char[] a , int startIndex,int count);

直接赋值得str指向得是常量池中的字符串常量池

通过new出来的str指向得是堆空间,所以这俩肯定不相等

String s1="ss";
String s2=new String("ss"); 

但是要是类的某个属性是字符串,然后来俩对象的该属性相同,一般构造器往里传入的参数基本都是“xxxx”,所以这俩对象的该属性 ==一般是相等的

1.1.2 不同拼接操作的对比

 public void test2() {
        String a = "a";
        String b = "b";
        String n3 = "ab";
        String n4 = "a" + "b";
        String n5 = a + "b";
        String n6 = a + b;
        String n7 = new String("ab"); //更不用说了
        System.out.println(n3 == n4); //true, 完全是在常量池中解决的
        System.out.println(n3 == n5);//fasle,有变量名参与了,就需要new了,所以涉及到了堆空间
    }

1.1.3 str.intern()

String内有个方法 intern(),相当于把对象转换到字符串常量池中

1.1.4 字符串和基本数据类型的转换

String-->基本数据类型行,用包装类的静态方法:parseXxx(str)

基本数据类型-->String类重载的方法: valuOf(xxx)

1.1.5 String和char[] Byte[]

String ---->char[]

String的toCharArray方法 str.toCharArray();

char[]--->String 使用构造器即可

Byte[] 涉及到IO流 ,97a,98b

编码过程:你看的懂得--->你看不懂的byte[ ],不同编码集还不一样

解码过程:看不懂的--->能看懂了String

String---> Byte[]

? str.getBytes();//可选参数是字符集,默认utf-8

Byte[] --->String

? 依旧是构造器就行,但是构造器是按着utf-8去构造的

? gbk的byte[] 构造方式是str=new String(bytes,"gbk");

1.2 StringBuilder StringBuffer

这三个,底层都是用byte[]实现的

String 不可变,不用想了,效率就是最低的

StringBuffer:可变长 JDK1.0+ ,效率有点低,因为他是线程安全的(他的方法基本都是synchronized的)

StringBuilder:可变长 JDK5.0+ ,效率高,线程不安全 ,只要不涉及多线程,就用这个。。

1.2.1StringBuffer StringBuilder

初始空间16,每次扩容*2+2,如果扩容仍不满足新加元素后的长度,直接用新长度

开发中,建议使用带指定容量的构造器,避免频繁的扩容

常用方法:

append() //添加元素,拼接运算,做了各种重载,所以输入的数值类型也行,会转成str

但凡有start,end作为参数的方法,都是左闭右开的