java38

字符串分类:
不可变字符串:字符串的值改变时,地址改变
可变字符串:字符串的值改变时,地址不变
可变字符串又分为:String Builder和String Buffer
String ,String Builder和String Buffer都实现了charSequence接口

创建字符串的两种方式

    String str = "hah";
    String str2 = new String("hh");

字符串对象值为空

        //未分配内存空间
    String s1 = null;
    String s2 ;
    //分配了内存空间
    String s3 = "";

字符串的比较

    String a1 = "ABC";
    String a2 = new String("ABC");
    System.out.println(a1 == a2);
【false】
    System.out.println(a1.equals(a2));
【true】

分析:
System.out.println(a1.equals(a2));
在equals方法中会先判断其地址是否相同
java38_第1张图片
若不相同,
判断所传数据是否是String类
是,接着判断两个数据的每一个字符是否相同
java38_第2张图片

字符串内存分析
String str = new String("ABCD");
会先在堆中创建一个对象(开辟一个空间),然后去常量池(方法区)中寻找是否有该变量,如果有,直接引用常量池中的内容
如果没有,将在常量池中开辟空间,至少创建一个对象
String str2 = "ABCD";
创建一个或不创建对象(如果常量池中已经有了该变量,则不需要再创建对象)
java38_第3张图片

    //属于lang包,不需要导包
    //判断两个字符串是否相等
    String a="AB";
    String a2 = new String("ab");
    System.out.println(a == a2);false
    System.out.println(a.equals(a2));false
    System.out.println(a.equalsIgnoreCase(a2));true(忽略大小写的比较)
    //大小写转换
    String b="ab";
    System.out.println(b.toUpperCase());AB
    String b2="AB";
    System.out.println(b2.toLowerCase());ab
    //返回在字符串中第一个/最后一个出现值的位置;
    String c="abcdefde";
    String c2="bc";
    String c3="de";
    System.out.println(c.indexOf(c2));1
    System.out.println(c.indexOf(c3));3
    System.out.println(c.lastIndexOf(c3));6
    //把char类型的数组转换成字符串类型
    char[ ] d = {'a','b','c'};
    String d2 = new String(d);
    System.out.println(d2);"abc"
    //把字符串类型转换成char类型的数组
    char[ ] d3 = d2.toCharArray();
    System.out.println(d3);'a''b''c'
    //输出字符串中某个位置的数据
    String a6 = "123456";
    System.out.println(a6.charAt(4));

你可能感兴趣的:(java38)