首页 > 试题广场 >

下面关于String描述正确的是()

[单选题]

下面关于String描述正确的是()

  • String str1=”aa”; String str2=”aa”; System.out.println((str1==str2)); 输出为true
  • String str1=”aa”; String str2=”aa”; System.out.println(str1.equals(str2)); 输出为true
  • String str1 = “aaaa” + “bbbbb” + “aaaa”; 会产生5个对象
  • String aaa = “aaaaaa\\[dd”.replaceAll(“[“, “c”); aaa的值变为”aaaaaa\\cdd”
答案是 AB  首先说明==号判断与equals方法判断对象的差别,==是判断两个对象是否是同一个对象,而通过equals方法判断的是两个内容是否相同。
然后来说一下String 这种特殊对象,它 生成一个String对象首先会在一个栈中的String常量池去查找对象,如果查找到则直接使用这个对象,如果没有在常量池中找到则创建新的对象,所以通过常量的方式去创建的时候如果是相同的内容那个则是同一个对象,所以在比较时会为true。
B       因为内容相同所以直接返回true。
C       会创建4个对象,String 中+符号重载以后的功能是,通过StringBuilder实现,而这个实现的String返回返回的时候会创建一个新的String对象。所以每次进行+操作拼接的时候都会创建一个对象,在最初创建的时候创建了内容为aaaa和bbbbb的两个对象存放在String pool池中,所以总共创建了四个String对象。
D 为了避免产生二义性得加上转义字符。
编辑于 2017-03-19 10:33:55 回复(0)
答案: AB

在Java中,字符串常量会放在一个内存池中重复使用,因此 A 是正确的, 同时C是错误的。
B显然是正确的,String的equals方法将会比较两个String对象的内容。
D是错误的,因为replaceAll方法的参数一中不能直接写 [ ,需要加 \\ 

发表于 2017-01-24 17:58:48 回复(0)
AB. B正确很容易理解,A中字符串在常量池中重复使用,但如果是new String("aa")地址就不同了。
发表于 2017-03-11 16:46:12 回复(0)
B是对的,因为equals就是比较两个变量的内容,A觉得是错的,打算等会儿去敲一下代码看看对错。 D感觉是错的,C也觉得是错的。
发表于 2017-02-24 15:30:34 回复(0)
你说选错我就知道选d,单选正确的就真的不会选了....
发表于 2017-01-21 15:56:08 回复(0)