java String 字符串常见的比较相等问题
2015-12-30 11:01
357 查看
String s1 = "HelloWorld"; String s2 = "World"; String s3 = "HelloWorld";
System.out.println(s3 == s1 + s2); // false System.out.println(s3.equals(s1 + s2)); //true System.out.println(s3 == ("Hello" + "World"));//true System.out.println(s3.equals(s1 + s2));//true第一个为false 是因为s3 与 s1 + s2 进行比较的时候用的是 == 比较的是引用变量里存储的地址值,首先,为s1 + s2 开辟一块新的内存空间 然后拼接字符串,进行存储。
s3.equals(s1 + s2),String类重写了equals()方法,所以比较的是字符串本身
s3 == "Hello" + "World"; 先将Hello和world进行拼接,然后比较他们的地址值得,HelloWorld拼接完成后,查询字符串常量池中是否存在 HelloWorld 结果存在,就不再创建了,所以比较的地址值正好是s3 的字符串所存储的地址
s3.equals(s1 + s2)因为重写了equals()方法,所以结果毫无疑问是true
字符串如果是变量的话,例如 s1 s2 首先开辟一块空间(自己理解这个空间应在还是在字符串常量池中),然后进行拼接
字符串如果是常量的话 比如“Hello” "World" 先进行拼接,然后在常量池中找,如果有就返回常量池的地址,如果没有就创建。
相关文章推荐
- java 集合(7) 自动装包解包
- Spring Test 整合 JUnit 4 使用总结
- Spring MVC的异常统一处理方法
- Spring 拦截器与过滤器
- Spring MVC的异常统一处理方法
- springMVC支持restful服务写出的服务端^_^
- Java反序列化漏洞执行命令回显实现及Exploit下载
- java中replace和replaceAll的区别
- Java反序列化漏洞执行命令回显实现及Exploit下载
- 关于Java的程序运行提醒
- spring 拦截器
- java基础之Integer.parseInt(String s ,int radix)方法使用解释
- Spring事务配置的五种方式 说明
- 记JAVA的二三事(3)——基本数据类型
- Java 实现导出excel表
- Java 实现导出excel表 POI
- Java实现截图并保存到本地
- JDK自带的监控分析工具JConsole
- Spring MVC 的搭建
- Spring blunder