java stringbuilder添加额外字符新手问题

标签 java string append immutability stringbuilder

我是 Java 新手。我编写了以下程序并得到了以下输出。

输出:

1

一个输出=

x=0 1 次测试..

x=1 1 陷阱..

如果字符串是不可变的,为什么我可以将“thisCycle”的值从“0”更改为“1”并打印出新的字符串值? 为什么我在“for”循环中得到两行输出? 为什么第一个字符串后面 append 了 2 个句点?

谢谢

import java.util.ArrayList;


public class Main {

    /**
     * @param args
     */
    private static final ArrayList<String> ListContents=new ArrayList<String>();

    public static void main(String[] args) {
         // TODO Auto-generated method stub
         String thisCycle="Cycle";
         thisCycle="0";
        // advance to next cycle
         if (thisCycle.equals("0")) thisCycle="1";
        System.out.println(thisCycle);
        //
        String a1="test";
        String a2="gotcha";
        ListContents.add(a1);
        ListContents.add(a2);
        StringBuilder a_out=new StringBuilder("");
        System.out.println("a out="+a_out);
        for(int x=0;ListContents.size()>x;x++) {
            a_out.delete(0, a_out.length()+1);
            if (thisCycle.equals("0")) a_out.append(ListContents.get(x)).append(".     ");
            if (thisCycle.equals("1")) a_out.append(ListContents.get(x)).append("..    ");          
            System.out.println("x="+x+" "+thisCycle+" "+a_out);
        }
    }

}

最佳答案

字符串本身是不可变的,但您更改的是变量的字符串值,而不是字符串本身。这是一个重要的区别 - Java 中的所有内容都是通过引用完成的。

由于循环执行了两次,因此您得到了两行输出,因为 ListContents 中有两个元素。

关于java stringbuilder添加额外字符新手问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25875318/

相关文章:

objective-c - 使用 Objective-C 写入 XML 文件

java - 使用M种预定义颜色中的N种进行颜色量化

java - 使用 GWT 编译时替换类

javascript - 将枚举(作为字符串)从 CAPS_CASE 转换为驼峰式

java - 为单个字符串设置字体?

r - 在 R 中写入 txt 时将信息行 append 到 data.frame 的开头

VIM 在每行末尾追加一个数字序列

java - 使用 MapStruct 将 2 个字符串字段映射到 OffsetDateTime

java - 在java中用正则表达式修改字符串电话号码

使用 C 的参数输入来转换问题