例如:
string test = "abcde"; // "abcde"
test = test.Substring(1); //"bcde"
Run Code Online (Sandbox Code Playgroud)
这是否意味着test
第二行与第一行不是同一个对象test
?即编译器创建了一个新的字符串对象实例并称之为'test',第一个'test'被发送到垃圾收集器?
如果是这样,这是我需要关注的吗?
谢谢
我知道字符串是不可变的,但为什么呢?
哪个概念使字符串类不可变?
public class Mainclass
{
public static void main(String[] args)
{
String s = "Example";
s.toUpperCase();
System.out.println(s);
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Example
Run Code Online (Sandbox Code Playgroud) 为什么poc
在每次乘法完成后我的变量值都没有更新System.out.println();
?
public static void main(String[] args) {
byte poc = 0b0001;
System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
System.out.println("The value of byte " + poc + " when multiplied by 0010 is: " + poc*0b0010);
System.out.println("The value of byte " + poc + " when multiplied by 0010 is: …
Run Code Online (Sandbox Code Playgroud) 来自Apple文档" 学习Swift的基本知识 "
常量是在第一次声明后保持不变的值,而变量是可以更改的值.常量被称为不可变,意味着它不能被改变,并且变量是可变的.如果您知道代码中不需要更改值,请将其声明为常量而不是变量.
然而在REPL中,我可以这样做:
14> let favoriteNumber = 4
favoriteNumber: Int = 4
15> let favoriteNumber = 5
favoriteNumber: Int = 5
Run Code Online (Sandbox Code Playgroud)
我显然遗漏了一些东西:这种差异与编译器或运行时有关,还是其他什么?
是否可以改变val
字段的值?如果是这样,那只是通过构造函数而不是程序中的任何地方完成的吗?使用val
意味着永远不能修改内存位置?例如:
val x = 5
我可以再次使用x
指向具有不同值的其他位置吗?
我的意思是,为什么存在defacto不可变对象?为什么我们不只是使用最终的静态修饰符?关于String,Java使它变得不可变的重要性是什么?
在myClass.h中,我有
@property (copy, atomic) NSMutableDictionary *thisParticularWordList;
Run Code Online (Sandbox Code Playgroud)
在myClass.m中,我填充thisParticularWordList,如下所示:
theSubview.thisParticularWordList = [NSMutableDictionary dictionaryWithDictionary: someDictionary];
Run Code Online (Sandbox Code Playgroud)
在xcode的变量视图中,我看到,该实例的属性确实已填充.
在我的代码的其他地方,我尝试这样做:
[self.thisParticularWordList removeObjectForKey:self.theKey];
Run Code Online (Sandbox Code Playgroud)
但不知何故,self.thisParticularWordList变成了一个不可变的NSDictionary.
我究竟做错了什么?
我有以下代码:
private static final ImmutableMultimap<String, String> namesToAddress;
public static List<String> getAddresses(String name){
return ImmutableList.copyOf(namesToAddress.get(name));
}
Run Code Online (Sandbox Code Playgroud)
我的问题是防御性copyOf()在这里是必要的,因为get()仍然返回一个不可变列表?
注意我正在使用Google Guava的ImmutableMultiimap.
谢谢.
我在这里读到:
不可变对象是良好的Map键和Set元素,因为这些通常在创建后不会更改.
我有一个阵列
val doot = Array("a", "b", "c")
Run Code Online (Sandbox Code Playgroud)
我想用字母"z"替换第二个索引,但我不想修改doot.我想创建一个新数组,因为这似乎是scala中的成语.
到目前为止,我只能通过更新修改数组
doot.update(1, "z") // But now doot is modified directly, not ideal!
Run Code Online (Sandbox Code Playgroud)
scala是否提供了这样做的方法?