题目:String s = new String("xyz"); 这么一题简单的java笔试题,对于java新手来说可能会做错,看只要是PAPER,看一遍,听人家讲一遍就知道了。
问:执行这一语句,一共创建了几个String对象?
答:2个,1个在String池中,一个在堆内存中。

但其实这题目具有很大的灵活度,如果不真正理解String的运作机制,换个样子就有可能把PAPER难住了。
String s1 = "xyz"; String s2 = "x"+"yz"; String s3 = "x"+new String("yz"); String s4=new String("xyz");
如果说s1==s2,那s1为什么!=s3呢?为什么s1!=s4呢?

String类是java中一个比较特殊的类,与其相关的还有java中仅有的两个内置重载操作符:"+"和"+="。
String类对象是不可变的,而StringBuffer & String Builder类对象是可变的;String类重写了equals方法,而StringBuffer & String Builder类却没有重写。

拿操作符"+"来说,其两边的操作元类型无非就5种情况(注意操作符的左结合性):
1、两个操作元都是基本类型(原始类型):效果是重载前的算术运算
2、两个操作元都是非String类型的引用类型:编译无法通过,不支持
3、两个操作元都是String类型:重载操作
4、一个是String类型,一个是基本类型:重载操作
5、一个是String类型,一个是引用类型:重载操作

其实对于3、4两种情况,由于String类型的特殊性,编译器会在编译时做一些特殊处理,所以情况会变得稍微复杂一点。
 1一题有关String笔试题的分析public class StringTest
 2

查看反编译后的源代码或许更能理解String的运作机制:
一题有关String笔试题的分析Compiled from "StringTest.java"

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
  • 2021-06-14
  • 2021-04-26
  • 2021-10-03
  • 2021-12-07
  • 2021-05-13
猜你喜欢
  • 2021-09-16
  • 2021-08-28
  • 2021-11-17
  • 2021-12-27
  • 2021-09-11
  • 2022-12-23
  • 2021-07-31
相关资源
相似解决方案