我的朋友给我发了一个问题,他在一次关于字符串对象的Java认证模拟考试中看到了一个问题:
String makeStrings(){
String s = "HI";
s = s + "5";
s = s.substring(0,1);
s = s.toLowerCase();
return s.toString();
}
调用此方法时将创建多少个字符串对象?考试给出的正确答案是3。但是我认为是5。
我错了吗?
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演示。