字符串构造
1.使用常量串构造
String h1 = "hello";System.out.println(h1);
2.new对象
String h2 = new String("hello");System.out.println(h2);
3.使用字符数组构造
char[] array = {'h','e','l','l','o'};String h3 = new String(array);System.out.println(h3);
我们发现Sting类被final修饰并且不能继承,并且返现变量value被private修饰这表明,修改字符串并不能实现,而String是引用类型,表面上的修改字符串实际只是修改引用对象,真正不能修改的是String类。
String对象的比较
1.==比较
对于内置类型一般比较变量中的值,如果是引用类型则比较的是地址。
2.equals方法
public boolean equals(Object anObject) {if (this == anObject) {return true;}
//1.首先比较两者是否为同一个对象if (anObject instanceof String){ //2.比较参数是否为Sting的子类String anotherString = (String)anObject;int n = value.length;
//3.比较两者长度大小if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;
//4.根据asm来比较首个不同字符的大小while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
我们发现Sting类重写了父类的equal方法
String s6 = new String("Hello");String s7 = new String("world");String s8 = new String("Hello");String s9 = s6;System.out.println(s6==s7);System.out.println(s7==s8);System.out.println(s6==s9);System.out.println(s6.equals(s8));System.out.println(s6.equals(s7));
在equals中我们发现s6和s8返回true,我们发现两者的防止内容相同但对象却不同。
而s7和s6却是对象不同,内容也不同,返回false。
3.comparetoignorecase方法
我们通过控制台发现该方法返回值是整数,我们回到方法代码
该方法忽略大小写存在,大小写不受影响。
4.compareto方法
我们发现与上个方法输出值不同,该方法因为不忽略大小写的区别所以根据长度和asm表大小比较并返回差值,回到方法内部。
我们发现只返回不同的首字符差值,如果完全相同则返回大小差值。
字符串查找
String s6 = new String("Hello");String s7 = new String("world");String s8 = new String("Hello");
1.charAt方法
该方法是返回改位置对应的字符。
2.indexOf方法
该方法返回该字符第一次出现的位置
3.lastIndex方法
该方法从后往前查找并返回该字符第一次出现的位置。