String message=new String("hello");于String message="hello";的区别?
答案:3 悬赏:50 手机版
解决时间 2021-04-05 05:13
- 提问者网友:原来太熟悉了会陌生
- 2021-04-04 13:13
String message=new String("hello");于String message="hello";的区别?
最佳答案
- 五星知识达人网友:青灯有味
- 2021-04-04 14:38
String str1="ABC"; 和String str2 = new String("ABC"); 有什么区别。
String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。
String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").
String 有一个intern() 方法,native,用来检测在String pool是否已经有这个String存在。
考虑下面的问题:
String str1 = new String("ABC");
String str2 = new String("ABC");
str1 == str2 的值是True 还是False呢? False.
String str3 = "ABC";
String str4 = "ABC";
String str5 = "A" + "BC";
str3 == str4 的值是True 还是False呢? True.
str3 == str5 的值是True 还是False呢? True.
在写代码的时候,一般不要 String str2 = new String("ABC");
String a = "ABC";
String b="AB";
String c=b+"C";
System.out.println(a==c); false
a和b都是字符串常量所以在编译期就被确定了!
而c中有个b是引用不是字符串常量所以不会在编译期确定。
而String是final的!所以在b+"c"的时候实际上是新创建了一个对象,然后在把新创建对象的引用传给c.
String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。
String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").
String 有一个intern() 方法,native,用来检测在String pool是否已经有这个String存在。
考虑下面的问题:
String str1 = new String("ABC");
String str2 = new String("ABC");
str1 == str2 的值是True 还是False呢? False.
String str3 = "ABC";
String str4 = "ABC";
String str5 = "A" + "BC";
str3 == str4 的值是True 还是False呢? True.
str3 == str5 的值是True 还是False呢? True.
在写代码的时候,一般不要 String str2 = new String("ABC");
String a = "ABC";
String b="AB";
String c=b+"C";
System.out.println(a==c); false
a和b都是字符串常量所以在编译期就被确定了!
而c中有个b是引用不是字符串常量所以不会在编译期确定。
而String是final的!所以在b+"c"的时候实际上是新创建了一个对象,然后在把新创建对象的引用传给c.
全部回答
- 1楼网友:拜訪者
- 2021-04-04 15:47
String message=new String("hello")创建了两个对象String message="hello"创建了一个对象追问请问创建了两个什么对象?? 一个什么对象?追答String message=new String("hello") String message1="hello";String message=new String("message1") ;String message=new String("hello")这是用string一个带参构造器new的
String message="hello"这个是直接创建对象的
String message="hello"这个是直接创建对象的
- 2楼网友:撞了怀
- 2021-04-04 15:36
new用于开辟新的内存空间;与其说String message=new String("hello");于String message="hello";的区别?还不如说
String message1=new String("hello");
String message2=new String("hello");
和
String message1="hello";
String message2="hello";
的区别,上面用new的形式指向的是不同的内存空间,下面的这个是指向同一个内存空间追问String message=new String("hello")中,message和“hello”都是对象?
String message="hello"中message是一个对象?
那String message="hello"中message能不能算是变量呢?追答前面的是变量String message,这是一个String类型的变量!后面的new String是调用String这个类型的构造方法创建的对象,下面的这个就直接是一个变量!
String message1=new String("hello");
String message2=new String("hello");
和
String message1="hello";
String message2="hello";
的区别,上面用new的形式指向的是不同的内存空间,下面的这个是指向同一个内存空间追问String message=new String("hello")中,message和“hello”都是对象?
String message="hello"中message是一个对象?
那String message="hello"中message能不能算是变量呢?追答前面的是变量String message,这是一个String类型的变量!后面的new String是调用String这个类型的构造方法创建的对象,下面的这个就直接是一个变量!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯