【发布时间】:2013-10-01 14:01:44
【问题描述】:
我可能会走很长一段路,希望我可以在没有代码的情况下解释这一点,因为现在代码到处都是。
我想要的是一个字符串
static String locationOneStr = new String ("res/.png");
static StringBuilder locationOneStrBuilder = new StringBuilder(locationOneStr);
其中包含我稍后要调用的 URL 的基本形式。
稍后出现的代码找到位于位置 0 或“locationOne”的数字,然后开关选择要使用的代码:如果是 0,则在 .png 之前插入 0;如果是 1,则插入 1,依此类推。
public static StringBuilder locationOneNumber(StringBuilder forCharConv, StringBuilder locationOneStrBuilder) {
char localChar = forCharConv.charAt(0);
switch (localChar) {
case '0':
BpmCalcFrame.locationOneStrBuilder.insert(3,"0");
System.out.println("Zero");
break;
/*
*
* Other Cases Omitted
*/
default:
System.out.println("There is no valid input!");
break;
}
return;
}
我遇到的问题是开关必须返回一些东西。但是,我用作测试环境的 jframe 需要一个字符串作为 URL。
JLabel locationOne = new JLabel("Image 1");
locationOne.setBackground(Color.WHITE);
locationOne.setIcon(new ImageIcon(ArrayComparison.locationOneNumber(forCharConv, locationOneStrBuilder)));
locationOne.setBounds(172, 45, 36, 68);
contentPane.add(locationOne);
我正在使用 StringBuilder,因为字符串会占用内存,但如果我必须将 StringBuilder 转换为 String,那么它就失去了使用 StringBuilder 的意义
我是不是走错了路,还是真的必须转换回字符串?这意味着我将在整个程序生命周期内平均每秒创建 2 个新对象。
有没有办法在不创建新对象的情况下将 StringBuilder 的实例作为字符串?
【问题讨论】:
-
每秒 2 个新对象?如果您每秒创建 1E7 或 1E9(或更多)个对象,您可能会考虑优化,但 2?
-
如果它困扰你,我只是测量了在我的机器上调用 StringBuilder.toString 的时间大约为 14 nano-秒!
-
我不想告诉你,但是更新屏幕的成本是创建 String 对象的 1000 倍。我建议您分析您的应用程序并处理使您的应用程序变慢的事情,而不是担心每一行代码。
-
@StackOverflowException 看起来您已经过期了升级 :)
-
如果你想避免创建 String 对象,我不会复制字符串文字,它只会浪费代码和时间。
标签: java string object stringbuilder