首页 > 解决方案 > 在 Java 列表中使用字符串

问题描述

我知道 Java 有一个关于字符串操作的惯用行为。因为字符串是不可变的,我们不能改变内容。所以我们不能写:

String s="test;"
s.toUpperCase();

我们需要将 s.toUpperCase() 的结果分配给一个新变量,例如:

String s1="test";
String s2=s1.toUpperCase;

s1.toUpperCase不是s1变成大写的字符串。它是一个具有自己内存位置的新字符串。因此s1,并s2使用两份“测试”和“测试”文献来引用两个完整的不同内存位置。但是如果我们不想使用新变量来分配新字符串,那么我们可以这样做:

String s="test";
s=s.toUpperCase();

问题:我们可以对列表做同样的事情吗?s 变量表示具有“test”值的内存位置。所以在s=s.toUpperCase();我们驱动s指向所创建字符串的新地址s.toUpperCase()。如果在List<String> listlist.get(0)(like s) 到字符串的位置,为什么我们不能做同样的事情slike:list.get(0)=list.get(0).toUpperCase()或任何其他方式,例如像数组一样工作:

String[] array={"test1","test2"};
array[0]=array[0].toUpperCase();

标签: javastringlist

解决方案


list.get(0)=list.get(0).toUpperCase()被 Java 语法和语义所禁止。

粗略地说(细节更复杂,见15.26.1. 简单赋值运算符 =更多细节),赋值的左边部分必须是变量(或字段)。但 list.get(0)不是,它是一个值,因此您必须使用一些方法来修改列表中相应元素的值:

list.set(0, list.get(0).toUpperCase())

推荐阅读