【黑马程序员】equals和==的区别
2015-10-29 17:51
253 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
首先, == 是一个运算符。而Equals则是String对象的方法。
其次,equals是比较值,==是比较地址(在比较基本数据类型的时候,==比较的也是值,本文只讨论比较引用数据类型),举例如下:
以上输出结果为flase,true。
aa,aa1值一样但地址不一样
以上输出结果为true true ,因为aa2 aa3指向同一个”1”,所以地址、值都相同
那么问题来了,此时为什么aa2和aa3都指向同一个”1”而不是new一个String呢?是因为Java中有一个叫字符串缓冲池的东西,程序在运行的时候会创建一个字符串缓冲池。
当使用String aa2 = “1” 这样的表达式创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第二个程序中,aa2先被放到了池中,所以在aa3被创建的时候,程序找到了具有相同值的aa2,将aa3指向aa2所引用的对象”1”
第一段程序中,使用了 new 操作符,他明白的告诉程序内存,要创建个新的,于是一个新的”a”String对象被创建在内存中。他们的值相同,但是位置不同,算是资源浪费吧!
首先, == 是一个运算符。而Equals则是String对象的方法。
其次,equals是比较值,==是比较地址(在比较基本数据类型的时候,==比较的也是值,本文只讨论比较引用数据类型),举例如下:
String aa=new String("a"); String aa1=new String("a"); System.out.println(aa==aa1); System.out.println(aa.equals(aa1));
以上输出结果为flase,true。
aa,aa1值一样但地址不一样
String aa2="1"; String aa3="1"; System.out.println(aa2==aa3); System.out.println(aa2.equals(aa3));
以上输出结果为true true ,因为aa2 aa3指向同一个”1”,所以地址、值都相同
那么问题来了,此时为什么aa2和aa3都指向同一个”1”而不是new一个String呢?是因为Java中有一个叫字符串缓冲池的东西,程序在运行的时候会创建一个字符串缓冲池。
当使用String aa2 = “1” 这样的表达式创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第二个程序中,aa2先被放到了池中,所以在aa3被创建的时候,程序找到了具有相同值的aa2,将aa3指向aa2所引用的对象”1”
第一段程序中,使用了 new 操作符,他明白的告诉程序内存,要创建个新的,于是一个新的”a”String对象被创建在内存中。他们的值相同,但是位置不同,算是资源浪费吧!
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- android上改变listView的选中颜色
- String.intern
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- PostgreSQL ERROR: invalid escape string 解决办法
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术
- C++实现string存取二进制数据的方法
- C#中string和StingBuilder内存中的区别实例分析
- PHP STRING 陷阱原理说明
- c#中 String和string的区别介绍
- C#实现的图片、string相互转换类分享
- asp.net String.IsNullOrEmpty 方法
- JavaScript中字符串(string)转json的2种方法
- C#中string用法实例详解
- C#中的DataSet、string、DataTable、对象转换成Json的实现代码
- JavaScript中的object转换成number或string规则介绍