String问题详解

String不是基本数据类型

String是不可变对象:不可变的原因是因为String内部通过char数组来保存字符串,而这个char数组被声明为:final

Java中是否可以继承String类?

不可以,因为String类有修饰符,而final修饰的类是不能被继承的

区分对象和对象引用

对于java初学者,对于String是不可变对象总是存在疑惑

例子:String s=”aaaa”;

      System.out.println(“s=”+s);

      

      s=”bbbb”;

      System.out.println(“s=”+s);

打印结果为:

        S=aaaa

        S=bbbb

根据结果貌似String是可变的,其实这里存在一个误区,s只是String对象的一个引用而不是对象本身。当执行  s=”bbbb”;时,又创建了一个新的对象,s又指向了这个新的对象

StringBuffer是线程安全的

StringBuilder不是线程安全的

 

 

      

 

==equals

==是比较地址值是否相等,equals比较对象值是否相等

 

 

例一:

String s= “hello”

String t=”hello”

Char c[]={‘h’,’e’,’l’,’l’,’o’};

下列选项中返回false的语句是:

(A) s.equals(t)   (B)t.equals(c)  (C)s==t  (D)t.equals(new String(“hello”))

 c在是一个数组,也是一个对象,存在堆里面。t存在常量池里。地址不一样,所以会报错

 

例二:

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 

 s3--hello放在堆里。s4--hello放在常量池里,地址不一样,所以s3==s4会报错。

 

String s5 = "hello";

 String s6 = "hello";

System.out.println(s5 == s6); //true

System.out.println(s5.equals(s6));//true






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值