String类及String方法

String str1 = "hello"; //此时的str1在栈上,而hello在heap里的常量池中
String str2 = new String("hello"); //底层调用的是下面的程序,在heap里创建了一个数组将hello字符放在value里
public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
        String str3 = new String("he")+new String("llo");

如下图:

在这里插入图片描述

String str1 = "hello";
String str2 =  "world" ;
String str3 =" helloworld";

System. out. println(str3 ==(str1+str2)) ;//false
System. out. println(str3 == ("hel1o"+ "world"));//false

如图:在这里插入图片描述

String str1 = new String("hello") ;
String str2 =  "hello";
System. out.print1n(strl == str2);//fa1sese
String str3 = "he" + new String("llo");
System.out. println(str1 == str3);//false
System .out.println(str2 == str3) ;
String str4 = "he" + "11o";
System.out.println(str4 == str2) ;//true
char[]  array ={'h','e','l','l','o'};
  String str5 = new String (array);//false
  System. out. println(str1 == str5) ;//false
  System. out. println(str2 ==  str5);//false
  System. out. println(str3 == str5) ;//false
  System. out. println(str4 == str5) ;//false

如图“
在这里插入图片描述

String  str1 = new String("abcdef");
String str2 = "abcdef";
System.out.pritln(str1==str2);//false
public static void main(String[] args){
String  str3= new String("ab")+new String("cdef");
srt3.intern();
String str4 = "abcdef";
System.out.pritln(str3==str4);//true

如图:

在这里插入图片描述String str3已经在堆中创建了新对象再调用intern方法时,就会在常量池中自动生成 引用对象。所以当str4找的时候就指向了新的引用对象所以两个的地址相同,即为true。

public static void main(String[] args){
String  string= new String("abcdef");
string.intern();
String str1 = "abcdef";
System.out.pritln(string==str1);//false

如图:
在这里插入图片描述

当用第二行代码时,因为在堆中已经生成了,所以intern的方法,就无法在常量池中生成新的引用对象,所以当str1去查找时,就没有 ,即为false
二.String 类的方法:
1.length()
确认字符串的长度;
2.isEmpty()
判断字符串是否为空。
3.charAt(index)
查找index索引对应的值

public static void main(String[] args) {
     String string = "abcdef";
     System.out.println(string.length()); //6
     System.out.println(string.isEmpty());//false
     System.out.println(string.charAt(3));//d
}

(4).getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
srcbegin:字符串要复制的第一个索引。
srcEnd:字符串要复制的最后一个索引。
dst[]:目标数组。
dstBegin:目标数组的起始索引。

public static void main(String[] args) {
     String string = "abcdef";
    char [] chars = new char[5];
     string.getChars(0,4,chars,0);
     System.out.println(chars);

}
}

(5)equals()
比较两个字符串的值

public static void main(String[] args) {
     String str1 = "abcdef";
   String str2 = new String("abcdef");
     System.out.println(str1.equals(str2));//true
}

(6)compareTo
两个值先转化成ASCII码,然后用作差的方式比大小,如果大于是正数返回1,负数返回-1,等于返回0

public static void main(String[] args) {
     String str1 = "abcdef";
     String str2 = "abcde";
     System.out.println(str1.compareTo(str2));//1
}

(7)indexOf()
返回index在字符串首次出现的位置。若没有则返回-1.

public static void main(String[] args) {
     String str1 = "abcdcef";
     int i = str1.indexOf('c'0);
     System.out.println(i);
}

(8)substring(int beginIndex, int endIndex)
截取字符串
beginIndex:截取时的起始下标
endIndex:终止下标不包含本身。

public static void main(String[] args) {
     String str1 = "abcdcef";
    String str2 = str1.substring(0,5);
     System.out.println(str2);
}

在这里插入图片描述
(9)replace(char oldChar, char newChar)
替换字符串指定内容。

public static void main(String[] args) {
     String str1 = "abc dcef";
     String str2 = "abc";
     System.out.println(str1.replace("bc","cc"));//accdcef
     System.out.println(str2.replace("bc","cc"));//acc
}

(10)String[] split(String regex, int limit)
将字符串转换成以limit为界限的字符串

public static void main(String[] args) {
     String str1 = "abc dcef";
     String[] str2 = str1.split(" ");
     System.out.println(Arrays.toString(str2));
}

在这里插入图片描述
(11)toLowerCase 将字符串转换成小写
toUpperCase 将字符串转换成大写

public static void main(String[] args) {
     String str1 = "abcdef";
     System.out.println(str1.toLowerCase());
     System.out.println(str1.toUpperCase());
}

在这里插入图片描述

(12)toCharArray()
将字符串转化成char数组存放

public static void main(String[] args) {
     String str1 = "abcdef";
     char[] chars= str1.toCharArray();
     System.out.println(Arrays.toString(chars));
}

在这里插入图片描述
(13)valueOf()
copyValueOf(char data[], int offset, int count)
char data[] : 要拷贝的数组
offset:拷贝的起始下标
count:拷贝几个数

public static void main(String[] args) {
    char[] chars= {'a','b','c','d'};
     System.out.println(String.valueOf(chars));
     System.out.println(String.copyValueOf(chars,0,3));
}

在这里插入图片描述