思维导图:
1.String类和String常用方法:
- String是引用类型,内部存放的是对象的地址,一般看到" "引起来的就是String类型的对象。
- String类的构造方式,常用三种:直接赋值、new String()、用字符数组构造
//String类的构建
String str1 = "goodboy";//直接赋值 String str2 = new String("goodboy!");//使用new String(); char[] ch = {'g','o','o','d','b','o','y'};//利用字符数组来帮助构建 String str3 = new String(ch);
//下图是不同创建方式在内存上存储的区别
- 得到字符串的长度是使用length (),例如:str1.length ();注意不能省略括号,求数组长度时使用array.length,注意二者区别!
- 比较俩个字符串类型的对象是否相同不能使用==,引用类型比较时用==的话比较的是地址;如果想比较俩个字符串内容是否相同需要使用equals方法,例如:str1.equals(str2)。比较俩个字符串类型的对象大小是可以使用compareTo方法,例如:str1.compareTo(str2);比较的是字符的ascii码值。
String str1 = "hahahaha"; String str2 = "HAHAHAHA"; System.out.println(str1.compareTo(str2));//32 //忽略大小写比较大小 System.out.println(str1.compareToIgnoreCase(str2));//0 System.out.println("====================="); System.out.println(str1.equals(str2));//false //忽略大小写比较是否相同 System.out.println(str1.equalsIgnoreCase(str2));//true
- String类中可以使用charAt(index);来查找字符串中index下标的字符,注意首字符是0下标,index的下标注意不能越界,否则会报错。
String str1 = "holabce"; char ret = str1.charAt(3); System.out.println(ret);//输出结果为:a
- 数字变字符串使用String.valueOf(数字);class student{
public int age; public student(int age) { this.age = age; } @Override public String toString() { return "student{" + "age=" + age + '}'; } } //方法1, String s1 = String.valueOf(123); String s2 = String.valueOf(0.666); 方法2, String s3 = String.valueOf(new student(16)); System.out.println(s3);
- 字符串转数字使用Integer.valueOf(字符串)或着Integer.parseInt(字符串);
int a = Integer.valueOf("66"); int b = Integer.parseInt("99"); 1.
字符串的大小写转换,改变大小写不是把原来的值改变,是产生了新的对象,原来的值不会改变。
String s1 = "goodboy"; //不会改变字符串s1 String ret = s1.toUpperCase(); System.out.println(s1);//goodboy System.out.println(ret);//GOODBOY String s2 = "GOODBOY"; String ret2 = s2.toLowerCase(); //不会改变字符串s2 System.out.println(s2);//GOODBOY System.out.println(ret2);//goodboy 1. 字符串转换成字符数组使用toCharArray();改变的不是原字符串。 String s1 = "goodboy"; char[] chars = s1.toCharArray(); for (char x: chars) { System.out.println(x); } System.out.println(s1);//goodboy
2.字符串常量池:
- 字符串常量池的存在为了使程序的运行速度更快更节省内存,字符串常量池存放在堆上。双引号引起来的字符串都会存放在常量池中,当第二次存储这个字符串的时候就会先去常量池中查找,如果有返回地址,如果没有则添加到常量池当中。
- s1.intern();的作用是检测s1所指的对象是否在常量池中存在,如果不存在就把当前对象入池;如果存在就返回常量池的对象的地址。该方法是手动将String对象添加到常量池中。
- 只要是new一个对象,这些对象都是唯一的,他们的地址都不一样。
- 解释一下String类三种对象实例化的区别。
1.String str1 = "abcde";
只会开辟一块堆内存空间并存放在常量池中
2.String str2 = new String("abcde");
会开辟俩块堆内存空间,将字符串abcde到常量池中,还有一块存放:new一个String对象
3.char[] ch = {'a','b','c','d','e'};
String str3 = new String(ch);
会开辟三块堆内存空间,一块空间存放数组,另外一块存放拷贝后的数组,还有一块存放:new一个String对象
3.字符串的不可变性:
- string类在设计时就是不可以改变的,是private引起的和final无关。
- 所有涉及到可能会修改字符串内容的操作都会创建一个新的对象,改变的是新的对象。
- final修饰类表明该类不想被继承,final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容是可以修改的。因为引用类型存放的是地址,改变了内容,但是地址又不会发生变化。
1.
public final array[] = {1,2,3,4,5,6};
array[0] = 66;//不会报错
2.
array = new int[]{9,10,11,12};//array的引用都变了,报错
4.StringBuilder和StringBuffer:
- StringBuilder和StringBuffer的存在是为了解决字符串不方便修改的问题。
- append();在字符串的尾部追加内容。
- String和StringBuilder的最大区别就是String内容无法修改,而StringBuilder的内容可以修改。频繁的修改字符串可以使用StringBuilder。
- String和StringBuilder不能直接相互转换。String变StringBuilder需要利用StringBuilder的构造方法和append方法;StringBuilder转String需要调用toString方法。
- String、StringBuilder和StringBuffer的区别:
1.String的内容不可以修改,StringBuilder和StringBuffer的内容可以修改
2.StringBuilder和StringBuffer的功能类似
3.StringBuffer属于线程安全操作
判断创建了多少个String对象
//hello String String str1 = new String("hello");共创建了俩个对象 //a String b String StringBuffer toString String str2 = new String("a")+new String("b");//
共创建了6个对象
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹
如果对您有帮助的话,
不要忘记点赞+关注哦,蟹蟹