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】
//equals本身的意义和 == 一样,都是比较内存地址
//在String类型中,equals方法是由String类里方法覆盖的
	System.out.println(a1.equals(a2));
【true】

String类中equals方法分析:
System.out.println(a1.equals(a2));
在equals方法中会先判断其地址是否相同

若不相同,
判断所传数据是否是String类
是,接着判断两个数据的每一个字符是否相同

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

	//属于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));
posted @ 2019-03-25 00:55  不断寻找  阅读(222)  评论(0编辑  收藏  举报