java中关于String类型对象的问题--判断是否是相同的对象

来源:百度知道 编辑:UC知道 时间:2024/06/14 13:03:34
package OOP.string.news;
import java.util.*;
public class toString {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String bcd=new String("你好");
String abc="你好";
Scanner input=new Scanner(System.in);
System.out.println("输入一个与abc一样的字符串");
String panduan=input.next();
if(panduan==abc)
{
System.out.println("输入的相等");
}else
{
System.out.println("输入的不相等");
}
if(abc==bcd)
{
System.out.println("abc与bcd相等");
}else
{
System.out.println("abc与bcd不相等");
}
}

}
做了这样的一个例子,只是想验证对于String声明的两种方式有什么不同,在这里个人认为String bcd=new String("你好");这样声明是直接为bcd声明了一块独立的空间,而String abc="你好";是现在内存中找是否有内容相等的对象如果有的话那么abc的指向和该对象就是一致的都指向了这个对象,如果没有

你上面说的固然是正确的。
但是 String panduan=input.next(); 你真正了解吗
要好好深入学习!了解 Scanner 内部方法。

告诉你 next() 方法 他会建立新的内存块来存对象 。他是用new 返回的
记住比较对象内容,都要加上 equals 不要偷懒。

String bcd=new String();
的意思你懂吗? 我把你的程序前几行改一下,你看看,

public static void main(String[] args) {
// TODO Auto-generated method stub
String bcd=new String("你好");
bcd abc="你好";
Scanner input=new Scanner(System.in);

你看看和你程序的效果,在理解一下:String bcd=new String(); 的意思!

其实所有的字符串都存储在字符串池中。
以String s = new String("abc");的方式声明, s是存储在堆中的一个对象, s的intern指向字符串池中的“abc”对象。
以String s1 = "abc"的方式声明, s1将直接指向字符串池中的“abc”

s==s1 返回 false
s.intern==s1 返回 ture