for each循环变量赋值问题
对于普通类型来讲
public void test() {
List<String> strList = new ArrayList<String>();
strList.add("乐视网");
strList.add("财经网");
strList.add("凤凰网");
for(String str:strList){
if("乐视网".equals(str)){
str = "腾讯网";
}
}
System.out.println(strList);
}
共1条回答
最新
最热
最新悬赏
高工看过来:java 开发手机APP,远程同屏时闪屏,谁能解决?Linux查看显卡数量命令?如何使用TensorFlow2实现pytorch中的nn.ModuleList想在tableau中,将下面的SQL条件转换成计算字段的写法。 请看看如何写?这种瀑布流布局是怎样实现的,最好能贴出详细csspython3.7 + opencv4.2.0 全屏循环显示文件夹中所有图像,图像分辨率等于屏幕分辨率,屏幕四周出现白色像素边框关于#php#的问题:PHP json输出内容内有重复的字段 怎么去掉如图vscode报错问题java调其他类的函数怎么调用python多次调用函数只返回第一次调用结果其余结果为0
最高悬赏
10.00
for each循环变量赋值问题
10.00
python多次调用函数只返回第一次调用结果其余结果为0
10.00
vscode报错问题
10.00
python3.7 + opencv4.2.0 全屏循环显示文件夹中所有图像,图像分辨率等于屏幕分辨率,屏幕四周出现白色像素边框
10.00
高工看过来:java 开发手机APP,远程同屏时闪屏,谁能解决?
5.00
java调其他类的函数怎么调用
5.00
这种瀑布流布局是怎样实现的,最好能贴出详细css
3.00
python for循环用range函数设置循环次数
2.00
java中的将局部变量赋值给成员变量
2.00
关于#php#的问题:PHP json输出内容内有重复的字段 怎么去掉如图
String类型在Java中是引用类型。

举个例子
上面三个式子,因为String是引用类型,执行前两句后,其实是相当于str1和str2两个变量同时指向同一个String类型,值为“one”。
但是str2 = “two”的意思,是str2重新被指向了一个新的变量String,值为“two”,而不是改变原来的String类型的值。
在foreach中也很好的表现了这点,str作为中间变量,遍历的同时和strList的每个遍历值同时指向同一个对象String。
但是你执行的str = “腾讯网”;这个语句,只是改变了中间变量指向新的String,而不是修改旧String的值。
而在你的第二个代码片中,使用的是Map类型。Map是一种键值对形式存在的引用类型。
foreach中m作为中间变量,同时指向了遍历的Map,而你使用的是m.put()函数,就是使用了指向的那个Map的方法,put将value改变了,所以整个集合的value跟着改变了。
这是个人的浅显理解,其实关键在于你改变值的方式其实两个代码片是不同的。
一个是直接用=改变,一个用既有的Map内含的函数改变。String类型的=并不是和基本类型一样,是普通的改变赋值,而是重新创建了一个新的对象,新的值。
10