当前位置: 技术问答>java相关
String mystr = "test"; 并没有 new 为什么也创建了对象?
来源: 互联网 发布时间:2017-04-13
本文导语: String mystr = "test"; 并没有 new 为什么也创建了对象mystr? 到底是在什么时候创建的?谢了! | 我听说是这样的: 用new String("")来定义的String是新开一块内存区域来存储内容 (赋值给变量)...
String mystr = "test"; 并没有 new 为什么也创建了对象mystr?
到底是在什么时候创建的?谢了!
到底是在什么时候创建的?谢了!
|
我听说是这样的:
用new String("")来定义的String是新开一块内存区域来存储内容
(赋值给变量),
而直接用=""就是先从一个什么存储空间里(好像叫堆吧)找,
找到了,就把变量指向那个值,
没有的话就在那个存储空间里建这么一个值,然后赋给变量!
说的不对就算我说梦话吧!:)
good luck
用new String("")来定义的String是新开一块内存区域来存储内容
(赋值给变量),
而直接用=""就是先从一个什么存储空间里(好像叫堆吧)找,
找到了,就把变量指向那个值,
没有的话就在那个存储空间里建这么一个值,然后赋给变量!
说的不对就算我说梦话吧!:)
good luck
|
String mystr = "test"; //虚拟机自动分配
String mystr = new String("test"); //对象分配,再程序中实现。
String是一个特殊对象,你可以通过new来实例化,也可以匿名实例化。
但是匿名实例化的效率比new实例化的效率还要高,你可以试试。
String mystr = new String("test"); //对象分配,再程序中实现。
String是一个特殊对象,你可以通过new来实例化,也可以匿名实例化。
但是匿名实例化的效率比new实例化的效率还要高,你可以试试。
|
String是一个比较特殊的东西 "test"本身就是一个String对象
String mystr= new String("test");
也是正确的,但没必要重复创建对象,
看一下书,仔细体会一下
String mystr= new String("test");
也是正确的,但没必要重复创建对象,
看一下书,仔细体会一下
|
请参考以下文档:
The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class.
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared. For example:
String str = "abc";
is equivalent to:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class.
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared. For example:
String str = "abc";
is equivalent to:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
|
你就把String看作原始类型就可以了!
这个特性只是为了方便,Java给的方便你还有意见啊!
这个特性只是为了方便,Java给的方便你还有意见啊!
|
我觉得
"test" 应该是一个匿名对象
而java的特点是自动回收,String str申明了一个对象,而这个对象引用了那个匿名对象,从而使用str就相当于使用了"test"
"test" 应该是一个匿名对象
而java的特点是自动回收,String str申明了一个对象,而这个对象引用了那个匿名对象,从而使用str就相当于使用了"test"
|
String mystr = "test";
根本就没有为mystr创建对象吧!
它应该相当于
String temp = new String("test");
String mystr = mystr;
其中temp是JVM自动创建的
mystr只是一个引用而已
类似于C里面:char * p = "hi!";
根本就没有为mystr创建对象吧!
它应该相当于
String temp = new String("test");
String mystr = mystr;
其中temp是JVM自动创建的
mystr只是一个引用而已
类似于C里面:char * p = "hi!";
|
String a = "ABC";
String b = "ABC";
a == b --> true
a.equals(b) --> true
String a = new String("ABC");
String b = new String("ABC");
a == b --> false
a.equals(b) --> true
第一个之所以是true是java优化的问题
它跟这个是等价的
String a = "ABC";
String b = a;
String b = "ABC";
a == b --> true
a.equals(b) --> true
String a = new String("ABC");
String b = new String("ABC");
a == b --> false
a.equals(b) --> true
第一个之所以是true是java优化的问题
它跟这个是等价的
String a = "ABC";
String b = a;
|
不知道这句话是不是等效
String mystr= new String("test");
String mystr= new String("test");
|
""在java中默认为字符串类型,当String mystr = "test"; 时,jvm自动为mystr创建"test"。
|
java 提供String str=""的初始化类
|
默认
|
String 是一个特例
记得就行了
记得就行了
|
同意。java规定 String对象创建的语法与与众不同
|
形同c语言的算符重载,在java中没有这个概念,但是虚拟机对String自动进行算符重载
|
"test".equals("test")
这个是不是能说明一些问题!
这个是不是能说明一些问题!