java - 在 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> list
点list.get(0)
(like s
) 到字符串的位置,为什么我们不能做同样的事情s
like:list.get(0)=list.get(0).toUpperCase()
或任何其他方式,例如像数组一样工作:
String[] array={"test1","test2"};
array[0]=array[0].toUpperCase();
解决方案
list.get(0)=list.get(0).toUpperCase()
被 Java 语法和语义所禁止。
粗略地说(细节更复杂,见15.26.1. 简单赋值运算符 =更多细节),赋值的左边部分必须是变量(或字段)。但 list.get(0)
不是,它是一个值,因此您必须使用一些方法来修改列表中相应元素的值:
list.set(0, list.get(0).toUpperCase())
推荐阅读
- php - 当我使用会话将值从一个页面发送到另一个页面时,出现以下错误
- swift - 在继续之前执行一个函数
- python - 从屏蔽的二维数组中提取平均值
- javascript - 如何将字典中的嵌套值更改为上层键
- react-native - 生成Android APK compileReleaseJavaWithJavac 错误
- python-3.x - 如何在python中写入文本文件?
- python - 如何让我的代码跳出循环并实际检测到某个输入
- wolfram-mathematica - 如何在列表列表上操作移动平均线?
- c - 为什么我不能调用函数信号返回的函数(信号处理程序)?
- javascript - 对象在 JavaScript 中的工作原理