1. 字符串不变:字符串的值在创建后不能被更改
String s1 = "abc";
s1+= "d";
System.out.println(s1);//"abcd"//内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。
这里我们就通过一个内存图来更好的向大家解释
首先我们来写一段简单的代码,然后画出该代码的内存图来帮助大家理解
1 public classTest {2 public static voidmain(String[] args) {3 String str1="123";4 String str2="123";5 String str3=new String("123");6 System.out.println(str1==str2);//true
7 System.out.println(str1==str3);//false
8 System.out.println(str2==str3);//false
9 }10 }
首先我给大家引入一个字符串常量池的概念
什么是字符串常量池呢,如上图
String str1=="123"
String str2=="123"
这样子命名的字符串的值就会被存入字符串常量池,而String str3=new String("123")这样new 出来的则不会
顾str1==str3的值为false,而str1==str2的结果则为true,下面通过一张图带大家更加深刻的去理解
当使用String str1="XXXXX"格式命名的时候,会先去字符串常量池中找,如果没有再创建,这样极大的
减小了内存的浪费
下面我来介绍几个String类的常用方法
1判断字符串内容是否相等的方法
public boolead equals(Object anObject)
2忽略大小写判断字符串内容是否相同的方法
public boolean equalsIgnoreCase (String anotherString)
1 public classTest {2 public static voidmain(String[] args) {3 String str1="abc";4 String str2="abc";5 String str3="ABC";6 System.out.println(str1.equals(str2));//true
7 System.out.println(str1.equals(str3));//false
8 System.out.println(str1.equalsIgnoreCase(str3));9
10 }11 }