java中的String s1 = "haha"; 和String s2 = new String("haha");有什么区别?
答案:5 悬赏:50 手机版
解决时间 2021-04-02 01:26
- 提问者网友:却不属于对方
- 2021-04-01 10:52
java中的String s1 = "haha"; 和String s2 = new String("haha");有什么区别?
最佳答案
- 五星知识达人网友:不如潦草
- 2021-04-01 12:23
字符串常量存放在字符串池中,s1="haha",如果s2="haha".将会在字符串池中找有没有"haha",有的话,将其赋值给s2
new String()创建字符串,新建一个堆内存,不在字符串池中查找。
建议给字符串初始化用第一种方法。
new String()创建字符串,新建一个堆内存,不在字符串池中查找。
建议给字符串初始化用第一种方法。
全部回答
- 1楼网友:雪起风沙痕
- 2021-04-01 16:20
第一个 内存中 存的是haha 第二个 存的是S2 S2里面是 haha
- 2楼网友:北方的南先生
- 2021-04-01 15:35
String s2 = new String("haha");创建了一个新的对象, 所以s1和s2内容相等,但是地址一定不是相等的
- 3楼网友:野味小生
- 2021-04-01 14:03
equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码:
String a=new String("foo");
String b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用equals方法。
如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object
类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
String a=new String("foo");
String b=new String("foo");
两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。
在实际开发中,我们经常要比较传递进行来的字符串内容是否等,例如,String input = …;input.equals(“quit”),许多人稍不注意就使用==进行比较了,这是错误的,随便从网上找几个项目实战的教学视频看看,里面就有大量这样的错误。记住,字符串的比较基本上都是使用equals方法。
如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:
boolean equals(Object o){
return this==o;
}
这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object
类继承的)就是使用==操作符,也是在比较两个变量指向的对象是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两个独立的对象则总返回false。如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。
- 4楼网友:你哪知我潦倒为你
- 2021-04-01 13:12
值一样,但是分配的内存地址不相同。
String s1 = "haha";
String s2 = new String("haha");
System.out.println(s1==s2); 结果是false
System.out.println(s1.equals(s2));结果是true
String s1 = "haha";
String s2 = new String("haha");
System.out.println(s1==s2); 结果是false
System.out.println(s1.equals(s2));结果是true
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯