1.基础知识

(1)String x = "hello";

(2)String x = new String ("hello");

第1种方式的工作机制是,首先看内存中有没有存放值为"hello"的地址,如果有则将x指向这块内存地址;如果没有则在内存中重新开辟一块地址存放值"hello",并将x指向这块内存地址。

String x = "hello";
String y = "hello";

所以上面的x,y都指向同一块内存地址。

第2种方式的工作机制是,不管内存中有没有存放值为"hello"的地址,都会重新开辟一块地址来存放值"hello"。

String x = new String("hello");
String y = new String("hello");

所以上面的x,y分别指向不同的地址。

2.==的详解

==对于基本类型和引用类型的作用效果是不一样的:

  • 基本类型(byte,char,boolean,short,int,float,long,double)比较的是是否相等。
  • 引用类型比较的是引用是否相同。
String x = "hello";
String y = "hello";
String z = new String("hello");

System.out.println(x==y);    //结果是:true
System.out.println(y==z);    //结果是:false

3.equals的详解

equals是基类object中定义的方法,jdk中源代码如下:

所以equals的本质就是==,即判断两个引用是否相同。

public class Person
{
    private String name;

    public Person(String name)
    {
        this.name=name;
    }

    public static void main(String[] args)
    {
        Person x=new Person("小明");
        Person y=new Person("小明");

        System.out.print(x.equals(y));    //结果:false
    }
}

上面的代码很容易理解,虽然x,y对象的name值都是"小明",但是它们本来就是两个不同的对象,所以equals的值为false。

注意:!!!

String类中,equals被重写了,功能变成了比较是否相同,源代码如下:

String x = "hello";
String y = "hello";
String z = new String("hello");
String m = new String("hello");

System.out.println(x==y);        //结果是:true
System.out.println(y==z);        //结果是:false
System.out.println(y.equals(z));//结果是:true
System.out.println(z.equals(m));//结果是:true

4.总结

==是比较引用是否相同。

equals本质就是==,但对于某些类(String)来说比较的是

Java中的==和equals的区别详解的更多相关文章

  1. java中a++和++a的区别详解

    java中的++操作无论在前还是在后,都是在变量自身的值加1,接下来将具体描述两者的区别 int a =5; int b =a++; System.out.println(b); 1.通俗易懂的理解是 ...

  2. 基于python中staticmethod和classmethod的区别(详解)

    例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object):   def foo(self,x):     print "executing foo ...

  3. java中List的用法和实例详解

    java中List的用法和实例详解 List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供 ...

  4. Java中堆内存和栈内存详解2

    Java中堆内存和栈内存详解   Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,ja ...

  5. DOS批处理中%cd%与%~dp0的区别详解

    转载:https://www.jb51.net/article/105325.htm DOS批处理中%cd%与%~dp0的区别详解     Windows下批处理中%cd%和%~dp0都能用来表示当前 ...

  6. java中的==和equals的区别

    关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指 ...

  7. Java中Object.equals和String.equals的区别详解

    前言 Java中的堆和常量池的区别是什么呢?Object.equals与String.equals的区别呢?下面让我们通过一个小示例让你明白它- 1.基础知识 Java的存储空间:寄存器.栈.堆.静态 ...

  8. java中hashcode和equals的区别和联系

    HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...

  9. java中的String类常量池详解

    test1: package StringTest; public class test1 { /** * @param args */ public static void main(String[ ...

随机推荐

  1. DOM事件-级别

    DOM事件0~3 不同级别的DOM事件因其实现方式不同,都有自己的特性. 0级:是在dom元素上提供相关事件类型属性,js程序可以通过这些特定类型的属性注册事件处理程序. 特性:一个元素同种类型的事件 ...

  2. vue路由的四种传值

    第一种:props 配置: 组件内定义: props: ['id'] 路由映射配置,开启props:true : { path: '/user/:id', component: User, props ...

  3. 长春理工大学第十四届程序设计竞赛(重现赛)L.Homework Stream

    链接:https://ac.nowcoder.com/acm/contest/912/L 题意: 作为大珩班尖子生,小r每天有很多作业要完成,例如工图.工图和工图. 很显然,做作业是要有顺序的.作业之 ...

  4. 练习三十二:用python实现:按相反的顺序输出列表的每一位值

    用python实现:按相反的顺序输出列表的每一位值 1. 使用list[::-1] list1 = ["one","two","three" ...

  5. mongodb 分片技术

    MongoDB Sharding Cluster 分片集群 规划:10个实例:38017-38026 (1)configserver:3台构成的复制集(1主两从,不支持arbiter)38018-38 ...

  6. android模拟器创建时的PANIC: Could not open:错误的解决

    创建AVD之后,在启动时报如下错误,解决方法如下: 在环境变量中创建ANDROID_SDK_HOME=D:\Program Files (x86)\Android\android-sdk,后面的当然是 ...

  7. java join 方法的使用

    在很多情况下,主线程创建并启动子线程,如果子线程中要进行大量的耗时运算,主线程往往将早于子线程结束之前结束.这时,如果主线程想等待子线程执行完成之后再结束,比如子线程处理一个数据,主线程要取得这个数据 ...

  8. Java 数字数组随机数工具类 NumberUtils、ArrayUtils、RandomUtils用法

    commons-lang3-3-3.8.1 //----------------------------------------------------------------------- /** ...

  9. fleet - 基于Machine Metadata的任务调度

    基于Machine Metadata的任务调度 复杂和特定的要求的应用程序可以针对一个子集的集群调度通过machine metadata.强大的部署拓扑结构,可以实现的基础上的机器的地区,机架位置,磁 ...

  10. 判断字符串string是数字、json结构、xml结构

    import org.json.JSONException; import org.json.JSONObject; import org.dom4j.DocumentException; impor ...