Java 为什么赢了';将字符串元素转换为小写?

Java 为什么赢了';将字符串元素转换为小写?,java,arrays,string,Java,Arrays,String,为什么不将string元素转换为小写? 给定字符串输入,转换为字符串数组。我希望每个单词都是小写的。然而,当我调试时,我注意到数组中的元素仍然在不同的情况下变化 String[] words = paragraph.split(" "); //[how, to, do, in, java] for(String word : words){ word = word.toLowerCase(); } 因为通过执行toLowerCase(),您正在实

为什么不将string元素转换为小写? 给定字符串输入,转换为字符串数组。我希望每个单词都是小写的。然而,当我调试时,我注意到数组中的元素仍然在不同的情况下变化

   String[] words = paragraph.split(" ");      //[how, to, do, in, java]
    for(String word : words){
        word = word.toLowerCase();
    }

因为通过执行
toLowerCase()
,您正在实例化一个新的
字符串。因此,您的
word
变量不再是对数组项的引用

要么将
toLowerCase()
的结果添加到新数组,要么使用索引循环:

for(i=0;i
您没有修改数组,而是将小写字符串分配给单词实例 可以使用classic for循环并将小写值指定给数组的当前索引

例如,for循环应该如下所示

for(int i=0;i< words.length;i++){
    words[i] = words[i].toLowerCase();
    System.out.println(words[i]);
}
for(int i=0;i
默认情况下,字符串对象是不可变的。当您将某些内容重新分配给字符串时,它会创建一个新对象,因此Word数组中的原始字符串对象保持不变。

toLowerCase
将返回一个
新的
对象,您必须存储它

您可以使用Java 8在一行中实现它:

Arrays.setAll(words, i -> words[i].toLowerCase());

是的,你只是没有对结果做任何事
toLowerCase
将返回一个新对象如果您正在使用旧的
for循环
它会工作得更好:
for(int i=0;i
对于某些语言,以更改word并用新对象替换数组中的旧word对象的方式执行此操作。Java不是这样工作的。