字符串是不可变的,这是否意味着我总是必须通过将字符串传递给方法来做类似的事情?
str= str.toLowerCase();
或者是
str.toLowerCase();
精细?我尝试了第二个,它没有给我任何错误,为什么?
字符串是不可变的
是的,您自己承认。不可变 对象 是不允许其状态更改的对象。这包括String
对象。
然后:
str.toLowerCase();
创建一个 新 的小写字母字符串, 并且不使用result
。在这种情况下,这很可能是一个“错误”,因为它str
仍然评估原始字符串对象(由于它是不可变的,因此 未 更改)。
没有编译器错误,因为Java无法知道返回值是“应该使用”的。
有时会调用一种方法来产生副作用,即使该方法也返回一个值*。在某些纯语言(没有副作用的语言)中,可以将其判断为错误,但是在具有副作用的语言中,这是不可能的。一些静态分析工具(不是javac,它只是带有原始警告集的编译器),可以通过应用其他启发式规则来检测上述错误。
同上,但分配 新的字符串 到 相同的变量 :(变量是 不 值/对象)。
str = str.toLowerCase();
但是, 不要求 将相同的变量重新分配给它。考虑以下示例,这些示例在上下文中可能完全有效:
String normalizedTitle = title.toLowerCase();
foo.setTitle(normalizedTitle);
// or, skip normalizedTitle, etc.
foo.setTitle(title.toLowerCase());
快乐的编码。
*导致副作用 并 返回通常被忽略的值的相对常见方法的示例是List.remove(int)
。
问题内容: 第一个System.out打印 2 并且应该打印,而第二个System打印 65 。我已经用这种语言编程了一年多了,据我所知这是不可能发生的!有什么帮助吗? 上面的代码在两行上都显示 9 。 问题答案: 当你这样做,之前仅仅是一个参考阵列, NO 新阵列已创建并分配给。因此,当您查看自己的价值时,基本上就是查看的价值,反之亦然。只是的别名。这就是为什么在第二张照片中您得到65。 检查该
问题内容: 在Python中,可以分割字符串并将其分配给变量: 但在Go中似乎无效: 问题: 如何在一个步骤中拆分字符串并分配值? 问题答案: 例如两个步骤 输出: 例如一个步骤 输出:
问题内容: 我知道问题的标题不是很清楚,对此感到抱歉,不知道如何提出。我有一个非常基本的Java实现问题,我想着重于应用程序性能,但是它也涉及Java中的String创建模式。 我了解Java中字符串的不变性概念。我不确定的是,我在某处读到以下内容不会创建两个不同的String对象: 我想知道Java是怎么做到的?它实际上是否在程序存储器中寻找一个String值并检查其是否存在,如果不存在则创建一
问题内容: 我发现能够在运行时创建新变量并创建结果字典以供以后处理(即写入文件)非常有用。 这将创建字典条目[result1:data1],我可以使用myDict [result1]对其进行调用。我一直在使用vars()而不真正了解我在做什么。我认为它返回带有局部变量(?)的字典,并且 vars()[x] = y 创建一个新的[x:y]字典条目? 我有一个脚本,其中传递了一个用{input1:da
在Bash脚本中,我想定义一个布尔变量y来存储另一个布尔变量x的求反值。以下脚本, 将变量y设置为1。如何更改y,使其计算结果改为false?
这是我目前所拥有的,但它不起作用。如何连接所有内容?我认为问题在于逗号。