面试题:String s = new String(“hello”)和String s = “hello”;的区别?

  • String s = new String(“hello”)和String s = “hello”;的区别?
  • 有。前者会创建2个对象,后者创建1个对象。

    • ==:比较引用类型比较的是地址值是否相同
  • equals:比较引用类型默认也是比较地址值是否相同,而String类重写了equals()方法,比较的是内容是否相同。
    */
    public class StringDemo2 {
    public static void main(String[] args) {
    String s1 = new String(“hello”);
    String s2 = “hello”;

System.out.println(s1 == s2);// false
System.out.println(s1.equals(s2));// true
}
}

String s1 = new String(“hello”);在堆内存中创建了一个对象
在方法区中的字符串常量池中创建了一个”hello”常量值, 地址0x001;
指向new String();
new String()本身就是new出来的,所以也有一个地址值0x0001;
赋值给String s1,指向了String s1

String s2 直接赋值,在常量池里找,有就直接赋值,把”hello”的地址0x001给了String s2
String s2指向了常量池里的”hello”
这里写图片描述

public class StringDemo3 {
public static void main(String[] args) {
String s1 = new String(“hello”);
String s2 = new String(“hello”);
System.out.println(s1 == s2);// false
System.out.println(s1.equals(s2));// true

    String s3 = new String("hello");
    String s4 = "hello";
    System.out.println(s3 == s4);// false
    System.out.println(s3.equals(s4));// true

    String s5 = "hello";
    String s6 = "hello";
    System.out.println(s5 == s6);// true
    System.out.println(s5.equals(s6));// true
}

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值