Java 你能解释一下以下源代码的输出吗?

Java 你能解释一下以下源代码的输出吗?,java,string,substring,Java,String,Substring,既然字符串对象在java中是不可变的,那么这个代码输出现在是如何产生的呢? 提前谢谢 class Solution { public static void main(String args[]) { String[] words = {"HOW", "NEAT"}; twist(words); System.out.println(words[0] + " " + words[1]); } public sta

既然字符串对象在java中是不可变的,那么这个代码输出现在是如何产生的呢? 提前谢谢

class Solution
{
   public static void main(String args[])
    {
        String[] words = {"HOW", "NEAT"};
        twist(words);
        System.out.println(words[0] + " " + words[1]);   
    }
    public static void twist(String[] w)
    {
         String temp = w[0].substring(0, 1);
         w[0] = w[1].substring(0, 1) + w[0].substring(1);
         w[1] = temp + w[1].substring(1);
    }
}

基本上,您的代码所做的是切换每个字符串的前两个字母的前几个字符。这里有一个逐步的解释

温度='H' w[0]=当前温度+当前温度 w[1]=加热温度+加热温度 编辑: 正如达菲莫所说:


数组引用是不可变的,但它指向的数组不是。您创建了新字符串并使数组指向它们


这意味着每次重新分配时,您都会创建一个新字符串。

在IDE中运行它…使用调试器并找出字符串是不可变的。您从原始数据中创建了新的数据。@ryekayo,我已经在Ide上运行了它,它现在给出了输出热量,这就是为什么我要问这个输出为什么会出现。数组引用是不可变的,但它指向的数组不是。您创建了新字符串并使数组指向它们。我已经理解了代码,我不是问您代码中发生了什么,我只是问字符串是否不变以及替换是如何发生的。为此,您可以对我进行向下投票,也提前感谢您的向下投票。