2

我可能会走很长一段路,希望我可以在没有代码的情况下解释这一点,因为现在代码到处都是。

我想要的是一个字符串

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 的实例作为字符串?

4

3 回答 3

5

一秒钟担心两个新对象是过早的优化。

您的 JVM 可能会花费不到十分之一毫秒的时间来执行此操作。

首先编写清晰明了的代码,然后再针对性能进行优化。

于 2013-09-25T19:58:35.457 回答
2

当你完成构建字符串时,你应该StringBuilder变成 a 。String这正是它应该被使用的方式。

于 2013-09-25T20:02:02.303 回答
1

怎么样:

static String locationOneStrTemplate = "res{number}.png";

//...

public static StringBuilder locationOneNumber(StringBuilder forCharConv,  String locationOneStrTemplate) {
    //...
    String actualURL = locationOneStrTemplate.replace("{number}", forCharConv);
    //...
}
于 2013-09-25T20:10:47.267 回答