当前位置: 首页 > 面试题库 >

Java中有多少个字符串对象?

亢奇
2023-03-14
问题内容

我的朋友给我发了一个问题,他在一次关于字符串对象的Java认证模拟考试中看到了一个问题:

String makeStrings(){
    String s = "HI";
    s = s + "5";
    s = s.substring(0,1);
    s = s.toLowerCase();
    return s.toString();
}

调用此方法时将创建多少个字符串对象?考试给出的正确答案是3。但是我认为是5。

  1. “嗨”
  2. “ 5”
  3. “ HI5”
  4. “H”
  5. “H”

我错了吗?


问题答案:

String makeStrings() {
String s = “HI”; //String literal
s = s + “5”; //concatenation creates new String object (1)
s = s.substring(0,1); //creates new String object (2)
s = s.toLowerCase(); //creates new String object (3)
return s.toString(); //returns already defined String
}


关于串联,在创建新的String时,JVM使用StringBuilder,即:

s = new StringBuilder(s).append("5").toString();

toString()对于一个StringBuilder是:

public String toString() {
    return new String(value, 0, count); //so a new String is created
}

substring 除非 为整个String索引编制索引否则 创建一个新的String对象:

public String substring(int beginIndex, int endIndex) {
    if (beginIndex < 0) {
        throw new StringIndexOutOfBoundsException(beginIndex);
    }
    if (endIndex > count) {
        throw new StringIndexOutOfBoundsException(endIndex);
    }
    if (beginIndex > endIndex) {
        throw new StringIndexOutOfBoundsException(endIndex - beginIndex)
    }

    return ((beginIndex == 0) && (endIndex == count)) ? this :
           new String(offset + beginIndex, endIndex - beginIndex, value);
}

toString()确实 不是 创建一个新的字符串:

public String toString()
{
   return this;
}

toLowerCase()是一个相当长的方法,但我只想说,如果String不是 已经全部小写,它 返回一个newString

鉴于所提供的答案是3,如JonSkeet所建议的,我们可以假定这两个String文字均已在String池中。有关何时将字符串添加到池中的更多信息,请参见有关Java的字符串池的问题。



 类似资料:
  • 问题内容: 从服务器以UTF-8发送时,我有一个大约500K的JavaScript字符串。如何用JavaScript判断其大小? 我知道JavaScript使用UCS-2,因此每个字符2个字节。但是,这取决于JavaScript实现吗?还是页面编码或内容类型? 问题答案: 值不依赖于实现,根据ECMA-262第三版规范,每个字符代表_UTF-16文本_ 的 单个16位单元 : 4.3.16字符串值

  • 问题内容: 您如何检查Java字符串中有多少个字母? 您如何检查字符串中某个位置的哪个字母(即字符串的第二个字母)? 问题答案: 一个) http://download.oracle.com/javase/7/docs/api/java/lang/String.html#length%28%29 编辑 如果您要计算中的特定类型字符的数量,则一种简单的方法是根据您的测试用例来检查每个索引。 其中可以

  • 在下面的Java代码中将创建多少对象:

  • StringBuilder对JAVA的最大容量有字符限制吗? 字符串生成器变量“url”是否具有最大容量,或者它可以容纳所有内容?

  • 将在字符串常量池和堆中为以下代码创建多少个对象: 据我所知,所有的文本都是在字符串常量池中创建的,但是字符串concat操作符在内部使用StringBuffer来追加字符串,那么堆中也会创建一个对象吗?

  • 问题内容: 我必须String对象: 我需要做的是找出第二个对象在第一个对象中重复多少次,您能告诉我该怎么做吗? 问题答案: 最简单的方法是在循环中使用,每次找到该单词时都会提高起始索引: 如果一个单词包含自我重复,它将多次找到该单词。请参阅上面的注释,以避免这种“重复”的发现。 ideone演示。