String两种赋值方式区别

String 有两种方式赋值,一种是直接赋值,一种是通过构造方法赋值
1.String 第一种赋值方法 ,直接赋值:

 String s = "Hello Java";

这种方式赋值,可以看作是”Hello Java”在堆内存中首先开辟了一个空间,在把空间地址赋值给了String s 对象.
也可以把”Hello Java”看作是String类的匿名对象,创建对象s,并把地址值赋给了s,s再指向”Hello Java”.
如下可以验证”Hello Java”是匿名对象

public calss Demo{
  public static void main(String [] agrs){
  System.out.println("Hello Java".equals("Hello java"));//输出为false 
}
}

由此可以看出”Hello Java”为一个匿名对象 因为他可以调用equals()方法
当然用这种方法来赋值最大的好处,是他在堆内存中开辟了一个空间,无论栈空间有多少个String 对象需要引用他都不用在堆内存中重新创建一个新的空间来重新将新的地址给对象
上面解释如下代码

public calss Demo{
  public static void main(String [] agrs){
  String str = "Hello Java";
  String str1 = "Hello Java";
  String str2 = "Hello Java";
  String str3 = "Hello Java";
  System.out.println(str == str1);//true
  System.out.println(str1 == str2);//true
  System.out.println(str2 == str3);//true
}
}

由此可见他们的地址值都是一样的所有猜都为true.
2.String第二种赋值方法,用new String()构造方法来赋值
具体代码:

public calss Demo{
  public static void main(String [] agrs){
 String str = new String("Hello Java");
 System.out.println(str);//Hello java
}
}

这种方式就是直接用String类的构造方法来赋值,这种方式用了new关键字,所以无论是创建几次对象都是需要重新在堆内存中创建新的内存空间,这样堆内存空间就会被占用很多,并且他们每个对象所引用的地址值都不一样,代码如下:

public calss Demo{
  public static void main(String [] agrs){
  String str = new String("Hello Java");
  String str1 =new String("Hello Java");
  String str2 =new String("Hello Java");
  String str3 =new String("Hello Java");
  System.out.println(str == str1);//false
  System.out.println(str1 == str2);//false
  System.out.println(str2 == str3);//false
}
}

所以这种方法远不如第一种直接赋值来的直接快速,并且不占用内存空间,所以推荐用第一种赋值方式

补充:
String 类进行操作的时候有个特别重要的特性:
也就是字符串一旦被赋值就不能再被改变,即使是在输出上是被改变了字符串的输出打印,但是内存空间是重新开辟了一个新的字符串空间,以前的字符串并没有被改变,而且以前的字符串还是在内存池中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值