Java StringBuilder循环:局部变量可能尚未初始化
我使用以下方法规范化给定的XML标记名:Java StringBuilder循环:局部变量可能尚未初始化,java,compiler-errors,initialization,stringbuilder,Java,Compiler Errors,Initialization,Stringbuilder,我使用以下方法规范化给定的XML标记名: public static String normaliseTagName(String tagName) { // Return a given empty tag name. if (tagName.length() == 0) { return tagName; } // Replace invalid start. if (isInvalidXMLStart(tagName.charAt(
public static String normaliseTagName(String tagName) {
// Return a given empty tag name.
if (tagName.length() == 0) {
return tagName;
}
// Replace invalid start.
if (isInvalidXMLStart(tagName.charAt(0))) {
tagName = XML_REPLACEMENT + tagName;
}
// Replace invalid characters.
StringBuilder normalised;
boolean invalidFound = false;
for (int i = 0; i < tagName.length(); i++) {
if (isInvalidXMLChar(tagName.charAt(i))) {
if (!invalidFound) {
normalised = new StringBuilder(tagName.substring(0, i));
invalidFound = true;
}
normalised.append(XML_REPLACEMENT); // COMPILER ERROR
} else if (invalidFound) {
normalised.append(tagName.charAt(i)); // COMPILER ERROR
}
}
return invalidFound ? normalised.toString() : tagName; // COMPILER ERROR
}
公共静态字符串normaliseTagName(字符串标记名){
//返回给定的空标记名。
如果(标记名.length()==0){
返回标记名;
}
//替换无效的开始。
if(isInvalidXMLStart(标记名.charAt(0))){
标记名=XML_替换+标记名;
}
//替换无效字符。
正常化;
布尔值invalidFound=false;
对于(int i=0;i
在确定使用之前,我不想初始化StringBuilder normalized
。换句话说,我只想在发现无效的XML字符时初始化它
我得到标准化的局部变量可能没有初始化
错误,我不明白为什么编译器告诉我当标准化时
显然从未在未初始化的情况下使用
StringBuilder的初始化路径
StringBuilder
谢谢 您需要显式初始化局部变量:
StringBuilder normalised = null;
。。。或者
StringBuilder normalised = new StringBuilder();
。。。在引用它之前
代码引用中的某些路径在初始化之前已标准化:
normalised.append(...
局部变量不会像实例字段那样自动初始化 您需要显式初始化局部变量:
StringBuilder normalised = null;
。。。或者
StringBuilder normalised = new StringBuilder();
。。。在引用它之前
代码引用中的某些路径在初始化之前已标准化:
normalised.append(...
局部变量不会像实例字段那样自动初始化 不能使用未初始化的局部变量。至少您已经将其设置为
null
。您不能使用未初始化的局部变量。至少您已经将其设置为null
本地变量不会像实例字段那样自动初始化。
我不知道!因此,如果我使用StringBuilder normalized=null
,我将初始化指向null的指针,而不实际在内存中创建任何内容(这是我想要的),对吗?@AlexisLeclerc它将使用null
值初始化引用。所以它确实在内存中创建了一些东西(堆栈):)但是是的,这就是你想要的。我明白了。我假设局部变量与实例字段具有相同的初始化行为。我今天学到了一些东西,谢谢!:)<代码>局部变量不会像实例字段那样自动初始化。我不知道!因此,如果我使用StringBuilder normalized=null
,我将初始化指向null的指针,而不实际在内存中创建任何内容(这是我想要的),对吗?@AlexisLeclerc它将使用null
值初始化引用。所以它确实在内存中创建了一些东西(堆栈):)但是是的,这就是你想要的。我明白了。我假设局部变量与实例字段具有相同的初始化行为。我今天学到了一些东西,谢谢!:)