- java中所有的语句都使用了完全限定名
- “==”和“equals”的不同
== : 比较基本数据类型时,比较的是值;比较引用数据类型时,比较的是地址。
equals:比较的是值内容。
- 多个常量赋值 :多个引用,值相同,地址相同
[qzdypre]
String a = "abc";
String b = "abc";
//a==b true
//a.equals(b) true
[/qzdypre]
2.利用构造方法创建对象:不同对象,不同地址
[qzdypre]
String a = new String("abc");
String b = new String("abc");
//a==b false
//a.equals(b) true
[/qzdypre]
3.常量赋值和对象引用:地址不同
[qzdypre]
String a = "abc";
String b = new String("abc");
//a==b false
//a.equals(b) true
[/qzdypre]
4.字符拼接:常量拼接优化机制,无视拼接符,会在常量池直接找拼接后的字符串
[qzdypre]
String a = "abc";
String b = "a" + "bc";
//a==b true
//a.equals(b) true
[/qzdypre]
5.字符拼接:变量和常量拼接,会创建stringbuilder对象,将拼接后的内容传给String对象
[qzdypre]
String a = "a";
String b = a + "bc";
String c = "abc";
//b==c false
//b.equals(c) true
[/qzdypre]
3.以下代码:
[qzdypre]
public class ConstructString {
public static void main(String[] args) {
char[] chs="0123456789".toCharArray();
String s1=new String();
String s2=new String(chs);
String s3=new String(chs,3,4);
String s4=new String(s2);
String s5="abc";
String s6="abc";
String s7=s5; //s7==s5返回 true
String s8=new String("hello"); //s8=="hello"返回false
String s="abc"+2; //java会将其它类型转换为字符串类型
}
}
[/qzdypre]
1)拼接过程中有变量参与,先创建一个stringbuilder对象,用于拼接内容,再将拼接后的内容转换为字符串对象
2)stringbuilder会调用tostring方法转换成字符串,tostring 底层调用string的构造方法 保存abc拼接后的内容
3)引用指向String对象地址值
对于s5,s6来说
字符串常量机制:
常量赋值,会先去常量池中找对应的字符串,如果没有,则创建,如果有,就指向常量池.
因此创建多个引用进行字符串常量赋值,内容相同,地址也相同
在String构造方法中传递一个字符串 String s2 = new String("abc");
1)先在常量池找到对应字符串,找不到就创建
2)将找到的"abc"读取到创建的String对象中
3)引用指向String对象地址值
- Java中String类的方法
compareTo(p256/257)
compareToIgnoreCase(p257)
contains(p258)
Endswith/Startwith(p258/p259)
indexOf(p260)
replace(p261)
String toLowerCase/toUpperCase(p262)
String strip(p263)
主要以书本为主,参考链接:https://blog.csdn.net/m0_53067943/article/details/127636615
文章评论