对==与equals的比较的理解

举例:

String s1 = "abc";

String s2 = new String("abc");

String s3 = new String("abc");

System.out,println(s1==s2); //false

System.out,println(s1.equals(s2)); //true

System.out,println(s2==s3); //false

System.out,println(s2.equals(s3)); //true

为什么呢?(字符串最大特点,一旦被  初始化 就不可以改变了。(理解为:开辟的内存空间))

我们深入的去分析一下s1与s2两个对象

s1相当于开辟了一个内存空间(但是java常量池里面有装着一个很常见的常量,所以s1仅仅只是把地址指向了常量池已经开辟的内存地址“abc”),里面装着 “abc” .

s2相当于也开辟了一个新的内存空间叫(new String()底层我排序不太清楚),然后把s2的地址有指向了“abc”.

s3相当于也重新又开辟了一个新的内存空间叫(new String()底层我排序不太清楚),然后把s3的地址有指向了“abc”.

==理解为:比较的是内存空间(也就是第一次的内存地址)

equals理解为:比较的是最终的内存指向。

是不是很好理解呢?我想我们一看就应该很清楚明白晓得了最终的答案了

还有一个问题就是:如果我比较对象呢?

比如:

class People{

String name;

People(String name){

 this.name = name;

}

}

 People p1 = new People("小头");

 People p2 = new People(“小头”);

我们从上面的分析的过程与结论对比:

很明显:

System.out,println(p1==p2); //false

System.out,println(p1.equals(p2)); //false

我们分析第一个==:他们的内存空间不一样,对吧?也就是一个的内存地址不一样。

我们分析第一个equals:最终指向的内存地址也不一样,对吧?因为他们最终的内存地址就是他们自己开辟的那个内存空间的地址。(name仅仅只是一个属性值而已!)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信公众号:Java团长

Java基础03 构造器与方法重载

在Java基础02 方法与数据成员中,我们提到,Java中的对象在创建的时候会初始化(initialization)。初始化时,对象的数据成员被赋予初始值。我们...

761
来自专栏java技术学习之道

最详细的java泛型详解

1225
来自专栏猿人谷

《C++ primer》--第7章

删除指针后,该指针就变成了悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。 习题7.8 举一个例子说明什么时候应该将形参定义为引用类型。再举一...

1755
来自专栏blackheart的专栏

[C#3] 4-匿名类型

1.DEMO 使用匿名类型: static void Main() { var someType = new { Name = "乱舞春秋", Age ...

1837
来自专栏用户2442861的专栏

Java内部类总结 (吐血之作)

http://blog.csdn.net/hikvision_java_gyh/article/details/8964155

361
来自专栏曾大稳的博客

c语法进阶

不管是基本数据类型还是结构体,c都是值传递,和java不同的是,java基本数据类型是值传递,对象是引用传递。所以在c当中一般都是指针传递

742
来自专栏彭湖湾的编程世界

【java】关于java类和对象,你想知道的在这里!

java类的基本组成 java作为一门面向对象的语言, 类和对象是最重要的概念之一,下面,就让我们来看看java中类的基本结构是怎样的: 一个简单的java类主...

18311
来自专栏LanceToBigData

面试题(一)关于内部类的面试题

一、看下面代码求值 1 /要求:使用已知的变量,在控制台输出30,20,10。 2  class Outer { 3 p...

1696
来自专栏用户3030674的专栏

java集合的操作(set,Iterator)

Iterator、Collection、Set和HashSet关系  Iterator<——Collection<——Set<——HashSet  Iterat...

813
来自专栏java学习

Java基础总结大全(2)

四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。 生活中很多数据的描述都采用的是字符串的。而且我们还会对其进...

3259

扫码关注云+社区