case class Person(var firstname: String, lastname: String)
val p1 = Person("amit", "shah")
val p2 = p1.copy()
p1.firstname = "raghu"
p1
p2
p1 == p2
Run Code Online (Sandbox Code Playgroud)
正如我通过一些文档说scala复制方法的案例类使用浅拷贝
但是这个例子的输出我无法破解
我已经从p1创建了副本p2,然后我将p1.firstname更改为"raghu"
因此,如果是浅拷贝,它应该改变p2.firstname的值,但这不会发生在这里
正如weakhashmap如何理解对其中一个密钥的引用现在已经过时,特别是如果密钥是一个汇集的String?
Java中的堆内存和字符串池有什么区别?
在这个链接中,据说:
String s1 = "Hello";
String s2 = new String("Hello");
Run Code Online (Sandbox Code Playgroud)
s1指向String Pool的位置,s2指向堆内存位置.
When creating a String in Java, what is the difference between these two:
String test = new String();
test = "foo";
Run Code Online (Sandbox Code Playgroud)
and
String test = "foo";
Run Code Online (Sandbox Code Playgroud)
When do I need to use the keyword new? Or are these two basically the same and they both create a new String object?
考虑以下代码:
fun main(args : Array<String>) {
println("Async" == MetricCategory.Async.toString())
println("Async" === MetricCategory.Async.toString())
}
Run Code Online (Sandbox Code Playgroud)
它输出
true
true
Run Code Online (Sandbox Code Playgroud)
虽然我在期待
true
false
Run Code Online (Sandbox Code Playgroud)
为什么true打印第二次检查,因为两个参考不同
我无法intern通过String类了解方法提供程序的用法.
String s1 = "vivek"; //Stmt 1
String s2 = "vivek"; //Stmt 2
String s3 = s1.intern(); //Stmt 3
System.out.println(s1 == s2);// prints true
System.out.println(s1 == s3);// prints true
Run Code Online (Sandbox Code Playgroud)
我读到内部编译器做一个实习生,但在哪个对象?编译器如何知道他必须做实习生s1来创建s2?
Stmt 2和Stmt 3这里有什么区别?两者都一样吗?如果是的话,internjava的方法有什么特别之处?
任何人都可以从这个链接http://www.javatpoint.com/corejava-interview-questions-3解释问题87和89
87)以下代码中将创建多少个对象?
String s1 = "string1";
String s2 = "string1";
String s3 = "string1";
Run Code Online (Sandbox Code Playgroud)
答案是:只有一个对象
89)以下代码中将创建多少个对象?
String s = new String("Welcome");
Run Code Online (Sandbox Code Playgroud)
答案是:两个对象,一个在字符串常量池中,另一个在非池(堆)中.
哪一个更好?
public class A {
private static final String DOSOMETHING_METRICS = "doSomethingmetrics";
private static final String SAYSOMETHING_METRICS = "saySomethingmetrics";
public void doSomething() {
...
System.out.println("Metrics for " + DOSOMETHING_METRICS + "is something");
}
public void saySomething() {
...
System.out.println("Metrics for " + SAYSOMETHING_METRICS + "is something");
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public class A {
public void doSomething() {
final String DOSOMETHING_METRICS = "doSomethingmetrics";
...
System.out.println("Metrics for " + DOSOMETHING_METRICS + "is something");
}
public void saySomething() {
final String SAYSOMETHING_METRICS = …Run Code Online (Sandbox Code Playgroud) 我一直在使用JShell来测试它,今天我遇到了相当有趣的行为.
jshell> String a = "A"
a ==> "A"
jshell> String b = "A"
b ==> "A"
jshell> a == b
$4 ==> true
jshell> "A" == "A"
$5 ==> true
Run Code Online (Sandbox Code Playgroud)
我首先想知道这是否是Java 9的一个功能,我通过使用Java 9编译和运行该程序来检查它
public class Equus {
public static void main(String... args) {
String a = "A";
String b = "A";
System.out.println("a == b");
System.out.println(a == b);
System.out.println("\"A\" == \"A\"");
System.out.println("A" == "A");
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,我得到了
Run Code Online (Sandbox Code Playgroud)a == b true "A" == "A" true
作为我的输出也是如此.这里发生了什么?为什么a和b彼此相等,为什么是 …
在Java中,字符串很特殊.
由于具有相同内容的字符串文字在公共池中共享存储,因此Java的String被设计为不可变的.也就是说,一旦构造了String,就无法修改其内容.否则,共享相同存储位置的其他String引用将受到更改的影响,这可能是不可预测的,因此是不合需要的.
如果我在String上同步怎么办?我会锁定共享相同内容的String的所有实例吗?
例如:我有一个多线程类,可以从数据文件中读取和写入.每天有1个文件,我想同步读取和写入同一个文件,以防止不可预测的行为.我可以简单地同步文件名(String)吗?