当前位置:  开发笔记 > 编程语言 > 正文

为什么Java中的某些方法会修改原始值而有些则不会?

如何解决《为什么Java中的某些方法会修改原始值而有些则不会?》经验,为你挑选了1个好方法。

Concat()方法不会修改原始值.它返回一个新值.
像这样:

String str = "good";
str.concat("ness");
System.out.println(str);   //"good"

但有些方法会修改原始值.为什么?

在Groovy中:

def languages = ["Java", "Groovy", "JRuby"]
languages.reverse()
===> [JRuby, Groovy, Java]
println languages
===> [Java, Groovy, JRuby]


languages.sort()
===> [Groovy, JRuby, Java]
println languages
===> [Groovy, JRuby, Java]

coobird.. 11

String在Java中是不可变的.任何"修改"a的方法都String必须返回一个新的实例String.

从用于Java API规范String类:

字符串是不变的; 它们的值在创建后无法更改.

Java语言规范在第4.3.3节:类字符串中定义了这种行为.


对编辑的回应:

似乎在Groovy中添加了一个示例.(我之前没有使用过Groovy,所以我对它的理解可能不正确.)

根据我从查看示例的理解,似乎有一个languages列表正在被reverse-ed和sort-ed - 这些操作本身不会修改String列表中包含的对象,而是对列表本身起作用.

列表的方式返回一个新列表,或者它如何修改或不修改列表与String对象本身的行为无关.



1> coobird..:

String在Java中是不可变的.任何"修改"a的方法都String必须返回一个新的实例String.

从用于Java API规范String类:

字符串是不变的; 它们的值在创建后无法更改.

Java语言规范在第4.3.3节:类字符串中定义了这种行为.


对编辑的回应:

似乎在Groovy中添加了一个示例.(我之前没有使用过Groovy,所以我对它的理解可能不正确.)

根据我从查看示例的理解,似乎有一个languages列表正在被reverse-ed和sort-ed - 这些操作本身不会修改String列表中包含的对象,而是对列表本身起作用.

列表的方式返回一个新列表,或者它如何修改或不修改列表与String对象本身的行为无关.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有