将StringBuilder作为字符串返回JAVA

将StringBuilder作为字符串返回JAVA,java,string,object,stringbuilder,Java,String,Object,Stringbuilder,我可能会走很长的路,希望我可以解释这一点,没有代码,因为在那一刻,代码到处都是 我想要的是一根绳子 static String locationOneStr = new String ("res/.png"); static StringBuilder locationOneStrBuilder = new StringBuilder(locationOneStr); 它包含一个我以后要调用的URL的基本形式 后面的代码将查找位于位置0或“locationOne”的数字,并通过开关选择要使用的

我可能会走很长的路,希望我可以解释这一点,没有代码,因为在那一刻,代码到处都是

我想要的是一根绳子

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转换为字符串,那么使用StringBuilder就没有意义了

我是不是走错了路,还是真的必须转换回字符串?这意味着在程序的整个生命周期中,我将平均每秒制作2个新对象


有没有一种方法可以使StringBuilder的实例成为字符串而不创建新对象?

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

您的JVM可能会花费不到十分之一毫秒的时间来完成这项工作

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

构建完字符串后,您应该将
StringBuilder
转换为
字符串。这正是它应该被使用的方式。

那么:

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

//...

public static StringBuilder locationOneNumber(StringBuilder forCharConv,  String locationOneStrTemplate) {
    //...
    String actualURL = locationOneStrTemplate.replace("{number}", forCharConv);
    //...
}

每秒2个新对象?如果您每秒创建1E7或1E9(或更多)对象,您可能会考虑优化,但是2?如果这让您感到困扰,我刚刚测量了在我的机器上调用StringBuilder.toString所需的时间大约为14纳秒!我不想告诉你,但是更新屏幕比创建字符串对象要贵1000倍。我建议您对应用程序进行概要分析,并处理那些会使应用程序变慢的事情,而不要担心每一行代码。@StackOverflowException看起来您应该升级了:)如果您想避免创建字符串对象,我不会复制字符串文字,这只会浪费代码和时间。为什么要用
新字符串复制字符串文字(
?只需从作者的代码中复制粘贴即可,code-nevetheless,你说得对,我会编辑。好的,我对java相当陌生,应用程序需要你点击一个按钮,每次点击它都会生成4或5个字符串,以图形方式表示数字。每个字符串都会分配内存,这意味着我的应用程序将一直在创建垃圾时间。这不是问题,我也没有遇到错误。我只是想知道是否有办法创建所有垃圾。@gcoulby:垃圾比你想象的要便宜得多。(而且,由四到五个大小适中的字符串生成的垃圾量,乘以任何人可以点击鼠标的最快速度,是很小的。)@LouisWasserman这正是我的问题。我只是在学习Java,在这样做的过程中,我经常听到有人说你不能手动管理内存创建新对象创建新内存分配等等。所以我很担心。但是,我认为对于我的应用程序的大小,我不必担心。我的对象是在用户输入如果这些对象是在计算机控制的循环中创建的,我预计会出现什么问题,其中许多可能会及时导致问题。垃圾很难理解。eclipse是否有任何工具来监控垃圾?