【黑马程序员】equals和==的区别

来源:互联网 发布:java专业入门课程 编辑:程序博客网 时间:2024/05/17 07:26

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

首先, == 是一个运算符。而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对象被创建在内存中。他们的值相同,但是位置不同,算是资源浪费吧!

0 0
原创粉丝点击