String使用 == 和 equal
来源:互联网 发布:地图开疆 知乎 编辑:程序博客网 时间:2024/06/15 05:47
String作为基本数据类型:String str = “string”;
String作为一个对象:String str = new String(“string”);
== :比较的是两个String类型的变量的引用,即是否是同一块内存地址;
Equal:继承自Object对象,但进行了重写;比较的是字符串的内容是否一致;
———————————————
String s1 = new String(“Hello”);
String s2 = new String(“Hello”);
s1 == s2 false
s1.equals(s2) true
s1和s2都是通过new创建了新的String对象,分别被分配了一块新的独立的内存堆;
———————————————
String s1 = new String(“Hello”);
String s2 = s1;
s1 == s2 true
s1.equals(s2) true
s1创建了新对象,直接把这个引用给了s2;
——————————————
String s1 = “Hello”;
String s2 = “Hello”;
s1 == s2 true
s1.equals(s2) true
不是用new创建的,JVM不会为其创建新的内存堆,而是去String缓冲池寻找;
**首先为s1寻找String缓冲池内是否有与”Hello”相同值的String对象存在,此时String缓冲池内是空的,没有相同值的String对象存在,所以虚拟机会在String缓冲池内创建此String对象,其动作就是new String(“Hello”);。然后把此String对象的引用赋值给s1。
接着为s2寻找String缓冲池内是否有与”Hello”相同值的String对象存在,此时虚拟机找到了一个与其相同值的String对象,这个String对象其实就是为s1所创建的String对象。既然找到了一个相同值的对象,那么虚拟机就不在为此创建一个新的String对象,而是直接把存在的String对象的引用赋值给s2。**
String方法的intern()方法应用:
String s = new String(“Hello”);
s = s.intern();
————————————
String s = “Hello”;
上下两段代码等同;
过程:上边的就是,先创建一个String内存堆,调用intern()方法,虚拟机会在String缓冲池内寻找与此Stirng对象所封装的字符串内容相同值的String对象,然后把引用赋值给引用原来的那个String对象的String类型变量。如果String缓冲池内没有与此String对象所封装的字符串内容相同值的String对象存在,那么虚拟机会为此创建一个新的String对象,并把其引用赋值给引用原来的那个String对象的String类型变量。这样就达到了共享同一个String对象的目的,而原先那个通过new关键字所创建出的String对象将被抛弃并被垃圾回收器回收掉。
降低了内存的使用消耗,提高了性能;
在String对象的比较上也同样更方便,因为相同的String对象将被共享,所以要判断两个String对象是否相同,则只需要使用”==”来比较,而无需再使用equals()方法来比较,这样不但使用起来更方便,而且也提高了性能,因为String对象的equals()方法将会对字符串内容拆解,然后逐个进行比较,如果字符串内容十分大的话,那么这个比较动作则大大降低了性能。
- String使用 == 和 equal
- String 中== 、equal和null
- JAVA String equal 和 ==
- Java String 中equal 和==
- String == equal
- String、=、equal详解
- String的==与equal和null
- Java基础-String的比较(==和equal)
- android String equal 和 ==的区别
- String中==和equal()的区别
- String比较中==和equal()的区别
- java String字符串中 ==和equal区别
- String中"=="和equal()的区别
- String 类的equal 和 == 的区别?
- String中的==和equal()理解
- .equal 和 ==
- == 和 equal
- == 和 equal()
- 跟我学分布式事务之2PC和3PC
- 软件开发过程,mvc
- CTF web题总结--上传文件绕过
- 数据挖掘中常见的数据处理技巧
- FreeMarker系列--FreeMarker入门
- String使用 == 和 equal
- centos磁盘扩展
- 使用STL:vector创建二维数组
- 最长公共字符串
- jq 动态增加、删除表tr行
- 分布式事务中2PC与3PC的区别
- Java 多线程停止 定义标记
- 成为一名成功的程序员的要求
- PowerDesigner使用(一):PDM文件导入Oracle数据库