什么是Java中的String Interning,何时应该使用它,为什么?
考虑以下代码:
String first = "abc";
String second = new String("abc");
Run Code Online (Sandbox Code Playgroud)
使用new关键字时,Java会abc String再次创建吗?这会存储在常规堆还是String池中?多少人String在将s结尾String池?
受到关于这个问题的评论的启发,我很确定Java String是在运行时而不是编译时间实现的 - 当然,事实上可以在不同的时间编译类,但在运行时仍然会指向相同的引用.
我似乎无法找到任何证据支持这一点.谁能证明这一点?
我正在使用分数计算器String.split()来获得术语拆分.输入用空格分隔(1/2/1/2)
String[] toReturn = new String[6];
result = isInputValid(expression);
toReturn = splitExpression(expression, placeToSplit[0]);
int indexOfUnderscore = toReturn[0].indexOf("_");
result = isInputValid(toReturn[0]);
if(toReturn[5] != null){
getOperator2(toReturn);
}
Run Code Online (Sandbox Code Playgroud)
错误发生在if语句中.toReturn[5]超出界限,因为当两个或更少的句子被回答时,即使我将值设置为,也会String.split()创建用于在空格处拆分的分割表达式.如果有办法判断一个数组中的字段是否存在,那可以解决它,或者是否有办法告诉你输入了多少个术语.我的程序适用,但我还没弄明白如何告诉我是否存在.toReturn[5]toReturn[5]1/2 + 1/2 * 1/2toReturn[5]