String s1=new String("a")
String s2=new String("a")这样是在栈中有两个引用s1和s2,它们的值不同,分别指向堆中的两个对象,对象的值都是a.
而String s1="a";
String s2="a";在栈中有几个引用呢?在堆里有几个对象呢?它们是怎么指向的啊?
String s2=new String("a")这样是在栈中有两个引用s1和s2,它们的值不同,分别指向堆中的两个对象,对象的值都是a.
而String s1="a";
String s2="a";在栈中有几个引用呢?在堆里有几个对象呢?它们是怎么指向的啊?
解决方案 »
- java 操作日志 如何编写 页面显示操作内容 求思路 俺在线
- struts1 传值的问题
- 真心求助:Servlet action is not available(struts+spring+hibernate)
- 请问一下,我有多个hibernate的应用访问一个数据库,怎么能够把数据库连接统一管理起来?用Jndi?
- 求救!牛人来帮忙啊!
- HibernateTemplate的find方法 如何指定按某一列升序或降序排?
- 怎样在struts中用spring?
- 打加帮我看看这段DOM生成XML的代码是报错了请高收帮我解决!
- 修改了web.xml,struts-config.xml就只能重启服务器了吗?
- axis2开发webservice客户端,HttpTransportProperties.Authenticator 无法解析
- 在线人数总是0的原因?
- JSP的问题
String s1=new String("a")
String s2=new String("a")
就是s1!=s2,因为s1,s2的分配的内存地址不同了。
String str = new String(data);我又测试了下这个:
class Test
{
public static void main(String[] args)
{
char data[] = {'a', 'b', 'c'};
String s1 = new String(data);
char data1[] = {'a', 'b', 'c'};
String s2 = new String(data1);
if(s1==s2)
{
System.out.println("==");
}
else
{
System.out.println("!=");
}
if(s1.equals(s2))
{
System.out.println("equals");
}
else
{
System.out.println("!equals");
} }
}为什么输出是!=和equals呢?
String s2="abc";
结果s1==s2?巧合?
String s1="abc";
String s2=s1;
这种情况下s1==s2
但是我试了几次都是==
所以地址是不一样的
用==判断总是不同的
equals判断内容相同所以能相同
当再声明一个String s2 = "abc"时s2指向的地址与s1指向的地址是一样的
所以用s1==s2判断时,返回值为true ;
用equals 就不用说了内容一样返回true ;
JAVA是“懒”,看到已经存在“abc"这个字符串,就在String s2时直接拿来引用了。
当再声明一个String s2 = "abc"时s2指向的地址与s1指向的地址是一样的
java不会再开辟空间给字符串abc的哦,所以字符串还是以前的字符串,所以String s1="abc",String s2="abc",就是s1指向了abc字符串,s2也指向了abc字符串,==用来比地址,对于同一个abc字符串,地址显然是一样滴嘛。