【问题标题】:Can you explain the output of the following source code?你能解释一下以下源代码的输出吗?
【发布时间】:2017-01-15 09:51:59
【问题描述】:

由于 Strings 对象在 java 中是不可变的,那么这个代码输出如何NOW HEAT,为什么不HOW NEAT? 提前致谢。

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);
    }
}

【问题讨论】:

  • 在 IDE 中运行它...
  • 使用调试器找出来
  • 字符串是不可变的。您从原件中创建了新的。
  • 数组引用是不可变的,但它指向的数组不是。您创建了新字符串并让数组指向它们。

标签: java string substring


【解决方案1】:

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

  1. temp = 'H'
  2. w[0] = NOW (temp + "OW")
  3. w[1] = HEAT (temp + "EAT")

编辑: 正如达菲莫所说:

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

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

【讨论】:

  • 我已经理解了代码,我不是在问你代码中发生了什么,我只是在问字符串是否是不可变的,替换是如何发生的。为此,你也可以对我投反对票,谢谢提前投反对票。
猜你喜欢
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 2023-03-26
  • 2019-05-14
  • 2011-04-20
  • 1970-01-01
相关资源
最近更新 更多