当前位置: 代码迷 >> Java Web开发 >> [求助]关于Java创建String对象的问题
  详细解决方案

[求助]关于Java创建String对象的问题

热度:199   发布时间:2007-08-07 14:14:31.0
[求助]关于Java创建String对象的问题

String s1=new String("abc");
String s2=new String("abc");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
以上结果是false,true;
String s1="abc";
String s2="abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
以上结果是两个true;
这两种创建String对象的方法不同在哪里?请高手结合内存的分配讲一下,谢了!

搜索更多相关主题的帖子: String  Java  对象  

----------------解决方案--------------------------------------------------------
用==比较的是两个对象的引用(可以理解为内存地址),用equals才是比较对象的值,当你申明String s1="abc";String s2="abc";时系统会自动将“abc”放在一个内存地址中,故而s1==s2,而申明String s1=new String("abc");String s2=new String("abc");则按照一般的对象来处理,所以用==比较是不相等的

----------------解决方案--------------------------------------------------------
也就是说,如果我象String s1="abc";String s2="abc"这样直接赋值,并且引号内的内容相同的话,s1和s2会指向同一个内存单元了?
----------------解决方案--------------------------------------------------------
还有就是,在Java里面,是不是只有String类可以这样直接赋值?还有其他类吗?
----------------解决方案--------------------------------------------------------
回复:(hwoarangzk)还有就是,在Java里面,是不是只...
基本数据类型都可以直接赋值
byte char int long short float double
如: int i=9;
除此之外 JAVA里的对象都是由new关键字 创建的

----------------解决方案--------------------------------------------------------

谢谢LS的...不过我知道基本数据类型是可以直接赋值的,也许我没说清楚,我的意思是,String是一个类,而其他的基本数据并不是一个类,虽然有各自的包装类,但是像String s1="abc"这样用类来直接给对象赋值而不用new来创建对象的还有其他的吗?谢谢


----------------解决方案--------------------------------------------------------
String s1="abc"
并不是建立新的对象
而是将一个字符串对象abc的引用给s1
"abc"这个对象是早就存在的


----------------解决方案--------------------------------------------------------

原来如此,明白了,谢谢


----------------解决方案--------------------------------------------------------
  相关解决方案