[求助]关于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"这个对象是早就存在的
----------------解决方案--------------------------------------------------------
原来如此,明白了,谢谢
----------------解决方案--------------------------------------------------------