这两个陈述之间有什么区别?
String s = "text";
String s = new String("text");
Run Code Online (Sandbox Code Playgroud) String Pool是什么意思?以下声明之间有什么区别:
String s = "hello";
String s = new String("hello");
Run Code Online (Sandbox Code Playgroud)
JVM存储这两个字符串有什么区别吗?
我知道常量池的概念和JVM用来处理String文字的String常量池.但我不知道JVM使用哪种类型的内存来存储String常量文字.堆栈还是堆?由于它是一个与任何实例无关的文字,我会认为它将存储在堆栈中.但是如果它没有被任何实例引用,那么必须通过GC运行收集文字(如果我错了,请纠正我),那么如果它存储在堆栈中怎么处理呢?
我有一个常量字符串列表,我需要在我的Java程序中的不同时间显示.
在CI中可以在我的代码顶部定义这样的字符串:
#define WELCOME_MESSAGE "Hello, welcome to the server"
#define WAIT_MESSAGE "Please wait 5 seconds"
#define EXIT_MESSAGE "Bye!"
Run Code Online (Sandbox Code Playgroud)
我想知道在Java中做这种事情的标准方法是什么?
据我所知,
可以更改可变字符串,并且不能更改不可变字符串.
在这里,我想像这样更改String的值,
String str="Good";
str=str+" Morning";
Run Code Online (Sandbox Code Playgroud)
和其他方式是,
StringBuffer str= new StringBuffer("Good");
str.append(" Morning");
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我试图改变其价值str.任何人都可以告诉我,这两种情况有什么不同,并给我清晰的可变和不可变对象的图片.
可能重复:
字符串对象和字符串文字之间的差异
假设我有两个陈述.
String one = "abc";
String two = new String("abc");
Run Code Online (Sandbox Code Playgroud)
哪一个是堆栈内存并存储在堆中?
这两者有什么区别?
创建了多少个对象以及内存中的引用如何?
什么是最佳做法?
public class Comparison {
public static void main(String[] args) {
String s = "prova";
String s2 = "prova";
System.out.println(s == s2);
System.out.println(s.equals(s2));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
true
true
Run Code Online (Sandbox Code Playgroud)
在我的机器上.为什么?不应该==比较对象引用相等?
在Java等其他语言中,实际上通过字符串文字与初始化程序获得的字符串之间存在差异.在Swift中,它们在引擎盖下是等同的吗?
例如
var string:String = ""
var string:String = String()
Run Code Online (Sandbox Code Playgroud)
有关Java中文字和对象之间差异的信息,请参阅此SO帖子.
这两种方法有区别吗?
public String toString() {
return this.from.toString() + this.to.toString();
}
public String toString() {
return new String(this.from.toString() + this.to.toString());
}
Run Code Online (Sandbox Code Playgroud)
(当然,假设from.toString()和to.toString()方法正在返回字符串).
基本上我对Java中的字符串处理感到困惑,因为有时字符串被视为基本类型,即使它们是类实例.
考虑以下代码:
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打印第二次检查,因为两个参考不同