String类的引用和实体相关内容
String是个类
首先大家要明白,String是个类,所以大家看到的字符串都是String类的对象。
而字符串有常量和变量之分
- 变量如:String x=new String(“hh”); 其中x就是一个String对象,存放在该对象对应的位置,而x保存的其实是自己的引用(也就是位置信息)。
- 常量如上面用到的"hh",则保存在常量池中。常量池和变量类型的String对象的存放位置不相同,也就是系统中同时有两个"hh"。一个在常量池中,一个在x对象的位置。
"hh"代表的也是自己的引用,但是String的构造函数会创建新的对象,不会使用常量池中的位置
String类引用和实体
定义:引用里面存放了位置信息,代表位置;实体指的是内容。
但System.out.println(x);
输出的仍然是实体(属于String 类的独特机制,一般的类没有)
1.创建String对象时,是否使用构造函数的区别
String类通过构造函数创建对象时,如果使用另一个String对象创建,使用的是实体,两者引用不同,只是实体相同。
String t=new String(s);
两者引用不同,使用的是构造函数- 而
//String x=y;
String x;
x=y;
这两种写法都属于传值,x和y两者引用相同,相当于两者拿的是同一个位置的东西,x只改变实体的话,y的实体也随之改变(但String对象的实体是不会改变的,如果引用不变的话)(String对象改变实体,引用必定改变。所以x的实体改变,一般不会影响y的实体,因为此时两者引用已经不同了),Java中也有可以修改的字符串类,大家可以看一下这一篇文章:链接: Java中的StringBuffer类(可以修改的字符串)
- 当String对象都被相同的String常量传值时,这些对象的引用都相同,因为String常量也是对象。如:
String x="hh";
String y="hh";
- 但是如果两者都是通过构造函数创建的,两者即便实体一样,引用也不一样。如:
String x=new String("hh");
String y=new String("hh");
2.String对象判断实体是否相等
大家应该明白
String x=new String("hh");
String y=new String("hh");
if(x==y)
上面的x==y
只是判断两者引用是否相同,结果为false,并不是判断实体
那么大家可以使用String类的一个方法boolean equals(String s)
该方法用来判断该对象和s的实体是否相同。如:
String x=new String("hh");
String y=new String("hh");
if(x.equals(y))
String对象的并置
并置指String对象的拼接如:"ddd"+"nihao"
-
常量并置得到常量,并将放入常量池。如:
s="hh"+"34"
,s是被"hh34"赋值的变量,t="hh34"
,t与s引用相等 -
只要有一个是变量,并置结果为变量。如:
h="34"+s
,这里s是上面的s,h被变量传值,常量池中没有34hh34,f="34hh34"
,h和f引用不等
大家如果发现错误和遗漏可以发在评论区
创作不易,大家点赞支持一下吧