关于“==” 和equals()方法以及String类的一写总结
来源:互联网 发布:淘宝游戏专营何时开通 编辑:程序博客网 时间:2024/06/05 20:51
(首先声明:这些文章都是自己的学习总结 写出来只为梳理自己的知识框架 也为日后巩固自身的java基础之用 ,也希望能帮到爱好java的朋友,能力有限 有错的地方欢迎大家提出来)
a)“==”标识符(identify if two references point to the same objext)说白了对于原始数据类型和引用类型 它比较的是栈 空间上的两块内存的值是否相等。
b)equals()方法(is overriden in class definition,and used to identify if two objects have the same type and content)
这个方法可以通过自己重写确定自己想要比较的内容
c)一般情况下,public boolean equals(Object o){
return this == o;
}它的效果与“==”是相同的
d)String s1 = new String("hello");
String s2 = s1;
String s3 = new String("hello");
s1 == s2 结果是true;
s1 == s3 结果是false;
s1指向了堆中新开辟的一块内存 s2也指向了同s1一样的那块内存 ,而“==”比较的是引用的地址,所以是true
s3是在堆中又新开辟的一块内存,s1与s3分别指向堆中不同的内存 所以会为false
e)String s = new String("abc");
String s1 = "abc";
String s2 = new String("abc");
s == s1 false
s == s2 false
s1 == s2 false
s指向堆中一块内存 s2指向堆中另一块内存 而s1指向字符串池 所以三者比较都为false
当执行第一条语句时,jvm会先检查字符串池中是否有“abc”,若没有,在其中放入“abc”,当使用new 时 会在 堆中新开辟内存,在其中写入“abc”,虽然每次new时都会检查字符串池中有无相同内容,但最后引用还是会指 向堆中对应的内容。这样做是因为String类型被final修饰 不可改变,当下一次执行 String s1 = “abc”时,会先检查字符串池中有无相同内容,这时是有,所以s1会直接指向字符串池,为的是提高效率
注:String类的intern()方法可以返回字符串池中的内容
这时:s == s1.intern() false
s == s2.intern() false
s1 == s2.intern() true
f) String类对equals()方法进行了重写比较的不是内存地址,而是对象中的内容即字符串本身
e)String hello = "hello";
String hel = "hel";
String lo = "lo";
hello == "hel" + "lo" true
hello == "hel" + lo false
如果字符串拼接时加号两边的是字面值(字面值就是直接在“ ”里写的值,比如上面的“hel”和“lo”)那么将在字符串 池中查找有没有对应内容的对象(这里的内容是“hello”) 并返回字符串池中的对象,这和“hello”是一样的
如果加号两边不满足上面的条件(比如两边的值是引用或者堆里的字符串对象),那么将不再字符串池里查 找“hello”,而是直接在堆里新生成一个对象
基于以上解说 “hel”+“lo”这种形式的字符串拼接与“hello”相同,都是从字符串池中寻找,所以第一个为ture
“hel”+lo 这种拼接 由于lo没有加双引号,将在对中新生成一个字符串“hello” 所以为false
- 关于“==” 和equals()方法以及String类的一写总结
- 关于String a=“”以及new String()和==以及equals的讨论
- Java中的String类以及 == 和equals()方法的比较!
- 关于String的==和equals
- String 的==和equals()方法
- ==和equals方法的区别以及Integer和String的应用
- String类的equals方法和==对比
- String类的equals和==方法
- String字符串的==、equals方法以及对象的==、equals方法的区别
- 关于equals和==的总结
- 关于STRING的“==”与equals()方法
- String类的equals和==
- Java中关于==和equal的区别以及equals()方法重写
- String的 == 和 equals方法的比较
- java的String的equals方法和"=="比较
- String的==和equals()方法的区别
- Java字符串String:equals方法和==的区别
- String equals方法和==的区别
- 用CocoaPods做ios的依赖管理
- 计算字体所占大小
- (3872)ZOJ
- 输入一个整数和一棵二元树。求出从根节点到叶节点的路径长度中与输入整数相等的所有路径。
- 内存管理arc,mrc
- 关于“==” 和equals()方法以及String类的一写总结
- centos_7.0 1503 配置笔记(二)--设置时间同步
- Linux设备驱动第0篇
- 设置手机静音和固定电话来电时手机震动
- BinarySearch二分查找算法
- 创建预制体和复制物体
- 总结
- 【BZOJ4027】【HEOI2015】兔子与樱花 贪心
- HDU ACM 1043 Eight->广度优先搜索(BFS)+康托展开(全排列hash)实践