本文目录一览:
JAVA中这两种给字符串变量赋值的方法有区别吗?
有区别。new出来的对象在堆内存中。
直接赋值的字符串在 常量池区
java字符串赋值
选BC
a是正确的,定义s并复制一个字符串字面量abcd
b是错误的,\0表示字符串的结束,如果不写,默认添加上,这段是正确的,但字符串不能用单引号,必须用双引号,因此也是错误的
c是错误的,\表示转义身后的字符,\a在java中不是转义字符,\n表示换行,\t表示一个制表符,\r表示回车等
d是正确的,正确定义s,但未初始化
java中字符串赋值问题
Java运行时会维护一个String
Pool(String池,
String常量池,
字符串缓冲区)
String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。
而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区
String
s
=
"accp";
创建s之前系统会先在"池子"中查找是否已经存在这个字符串,
如果存在则直接符号该字符串的句柄
如果不存在,
系统会创建一个新"accp"字符串,
并返回句柄,
以后再有"accp"被要求创建,
系统不会创建新的,而是直接返回已经存在的字符串的句柄
String
s
=
new
String("accp");
系统不会去"池子"中查找,
直接在内存中新开辟一块空间,
初始化为"accp",并返回句柄