Java中String类的引用和实体相关内容(包含判断String对象实体是否相等的方法和并置运算解析)

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引用不等

大家如果发现错误和遗漏可以发在评论区
创作不易,大家点赞支持一下吧

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EEEzhenliang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值