String ssss=new String("sss");
if(ssss=="sss") {
}
为啥是false
Java中==和equal的区别为:
1、== 表示 判断2个变量或对象实例是否指向同一个内存空间,equals()表示 判断2个变量或对象实例所指向的内存空间的值是否相同。
2、== 表示 对内存地址进行比较,equals()表示 对字符串的内容进行比较。
3、== 表示引用是否相同,equals() 表示值是否相同。
数字用==,String得用.equals()方法进行比较
如果直接使用String ssss = “abc”来创建ssss,那返回的结果就是true了,但是你使用的是new String 的方式来创建ssss,用new String来创建ssss时,首先会给ssss创建一个内存地址,然后再把“abc”这个字符串对象的值赋值给它。而 java的"=="是用来判断对象的内存地址是否相等的,用new String创建的ssss内存地址和”abc“的内存地址不一样,所以就返回false了呀
如果直接使用String ssss = “abc”来创建ssss,那返回的结果就是true了,但是你使用的是new String 的方式来创建ssss,用new String来创建ssss时,首先会给ssss创建一个内存地址,然后再把“abc”这个字符串对象的值赋值给它。
果然越简单的问题回答的越多,我也来凑个热闹,String str="sss",是直接在常量池开辟一块“空间”,常量池在堆内存中,堆内存可以理解为你内存中很大的一块空间。
String st1r =new String("sss"),是在堆内存重新开辟一个空间,而==是比较地址的,这两个空间当然不一样啦
。
拓展:如果你重新String strnew = "sss",优先去常量池找sss,如果找到了就直接用,找不到才新开辟空间;所以strnew==str的结果是true。
java中数字的比较要用"==", String要用equal()的方法来进行比较
这个内存加载过程 首先虚拟机会在常量池中开辟一个空间存放sss ,之后会将地址指向new String()在堆中开辟的空间,并且会把hash值和value同时指向ssss
ssss是栈中对new String() 的引用。而String类又重写hashcode方法。sss和ssss获取的hash是一样的。“==”比较的是地址,很明显 sss的地址在常量池,ssss的地址是指向堆空间的
地址不同肯定是false,为什么equals可以,是因为String类重写了equals方法,会将两个字符串每个字符进行比较。可以用System.identityHashCode("sss")和
System.identityHashCode(ssss)原始地址你就明白了