精华内容
下载资源
问答
  • ==和equals

    千次阅读 2019-01-10 16:04:53
    ==  equals 比较的都是地址 举个栗子: String这个引用类型 在JVM里,考虑到垃圾回收(Garbage Collection)的方便,将heap(堆)划分为三部分:young generation(新生代)、tenured generation (old ...

    ==  是运算符   equals  是方法  方法可以被重写

    == 和  equals  比较的都是地址

    举个栗子:

    String这个引用类型

    在JVM里,考虑到垃圾回收(Garbage Collection)的方便,将heap(堆)划分为三部分:young generation(新生代)、tenured generation (old generation)(旧生代)、permanent generation(永生代)。

    字符串为了解决字符串重复问题,生命周期长,存于永生代中。

    String str1 = “ABC”;可能创建一个或者不创建对象,如果”ABC”这个字符串在java String池里不存在,会在JVM的字符串池里创建一个创建一个String对象(“ABC”),然后str1指向这个内存地址,无论以后用这种方式创建多少个值为”ABC”的字符串对象,始终只有一个内存地址被分配,之后的都是String的拷贝,Java中称为“字符串驻留”,所有的字符串常量都会在编译之后自动地驻留。

    所以String 直接赋值,如果结果一样,那么使用 == 和 equals 比对都是true,这也看出  ==  和 equals  比较的是地址,(==  基本数据类型比较,基本数据类型在方法区,常量池,所以是地址比较)

    如果String 是new 出来的对象,那么地址是不相等的,同理如果是自己自定义创建的对象,也不相等

    但是String 里面的equls 方法自己写的,比对的是字符串内容,自定的类需要自己处理

    equals 比对的是地址,为什么这么讲?因为父类是Object ,如果你充型定义了就不是比对的地址了,例如像String 那样

     

    展开全文
  • == equals 的区别

    万次阅读 多人点赞 2019-04-04 18:23:41
    == equals 的区别是什么? 使用 == 比较 Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。 引用数据类型,比较的是他们在堆内存地址是否相等。每新new一...

    == 和 equals 的区别是什么?

    使用 == 比较

    Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。
    引用数据类型,比较的是他们在堆内存地址是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false。

     

    使用 equals 比较

    equals方法是Object类的一个方法,Java当中所有的类都是继承于Object这个超类。
    JDK1.8 Object类equals方法源码如下,即返回结果取决于两个对象的使用==判断结果。

    public boolean equals(Object obj) {
        return (this == obj);
    }

    在实际使用中,一般会重写定义的class的equals方法,如JDK1.8 java.lang.String类的equals源码如下。
    即两个字符串使用 == 相等  或者  两个字符串的所有组成字符都相等返回true,其他情况返回false。这里就定义String根据equals方法判断是否相等的逻辑。

    public boolean equals(Object anObject) {
    	if (this == anObject) {
    		return true;
    	}
    	if (anObject instanceof String) {
    		String anotherString = (String) anObject;
    		int n = value.length;
    		if (n == anotherString.value.length) {
    			char v1[] = value;
    			char v2[] = anotherString.value;
    			int i = 0;
    			while (n-- != 0) {
    				if (v1[i] != v2[i])
    						return false;
    				i++;
    			}
    			return true;
    		}
    	}
    	return false;
    }

     

    总结:

     == 的作用:
      基本类型:比较值是否相等
      引用类型:比较内存地址值是否相等

    equals 的作用:
      引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法

     

    PS:可以延伸自己写代码比较一个基本类型的包装类对象使用 == 和 equals进行比较的结果


    进一步详细文章还可以参考:
    https://www.cnblogs.com/smyhvae/p/3929585.html
    http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html
    http://www.cnblogs.com/zhxhdean/archive/2011/03/26/1996468.html

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • 关于==和equals的区别和联系,面试这么回答就可以

    万次阅读 多人点赞 2018-07-12 09:23:47
    长篇大论的话,我这里就不多写了,相信大家入门java 的时候就知道个大概了,这里想表述的是,如果面试官问你《关于==和equals的区别》,该怎么回答完美呢?可以这样说总结的来说: 1)对于==,比较的是值是否相等 ...

    长篇大论的话,我这里就不多写了,相信大家入门java 的时候就知道个大概了,这里想表述的是,如果面试官问你《关于==和equals的区别》,该怎么回答完美呢?可以这样说

    总结的来说:

      1)对于==,比较的是值是否相等

                如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

        如果作用于引用类型的变量,则比较的是所指向的对象的地址

      2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象

        如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

        诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

    展开全文
  • 在java中==和equals()的区别

    万次阅读 多人点赞 2018-09-20 11:36:35
    在Java学习面试中经常遇到这个问题,虽然想着简单,但还是决定记录下来,毕竟菜嘛...... ==: ==是直接比较的两个对象的堆内存地址,如果相等,则说明这两个引用实际是指向同一个对象地址的。但是我们又常常碰到...

    在Java学习和面试中经常遇到这个问题,虽然想着简单,但还是决定记录下来,毕竟菜嘛......

    ==:

    ==是直接比较的两个对象的堆内存地址,如果相等,则说明这两个引用实际是指向同一个对象地址的。但是我们又常常碰到这样一个问题

    最终结果是 true,true,false,那既然==是比较的地址,那么int数据的地址是怎样的呢,String又是怎样的呢?

    对于基本数据类型(byte,short,char,int,float,double,long,boolean)来说,他们是作为常量在方法区中的常量池里面以HashSet策略存储起来的,对于这样的字符串 "123" 也是相同的道理,在常量池中,一个常量只会对应一个地址,因此不管是再多的 123,"123" 这样的数据都只会存储一个地址,所以所有他们的引用都是指向的同一块地址,因此基本数据类型和String常量是可以直接通过==来直接比较的。

    另外,对于基本数据的包装类型(Byte, Short, Character,Integer,Float, Double,Long,  Boolean)除了Float和Double之外,其他的六种都是实现了常量池的,因此对于这些数据类型而言,一般我们也可以直接通过==来判断是否相等。那么再出一个问题考考大家 ↓

    猜猜看,结果是啥?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

     

    结果是 true,false。没想到吧!其实是因为 Integer 在常量池中的存储范围为[-128,127],127在这范围内,因此是直接存储于常量池的,而128不在这范围内,所以会在堆内存中创建一个新的对象来保存这个值,所以m,n分别指向了两个不同的对象地址,故而导致了不相等。

    equals方法:

    之前在网上也搜了很多相关的问题,但给出的答案却不尽人意,很多网友都说equals比较的是对象的内容,这样的说法是不准确的。首先我们来看看在Object类中定义的equals方法 ↓

    可以看到,在Object类型的equals方法是直接通过==来比较的,和==是没有任何区别的。

    那么为什么又要说equlas和==的区别呢?是因为equals方法是可以由我们自己重写的。

    众所周知,我们所有的类都直接或间接地继承自java.lang.Object类,因此我们可以通过重写equals方法来实现我们自己想要的比较方法。来看看eclipse为我们自动生成的equals方法 ↓

    可以看出,eclipse还是很智能的,它首先是判断两个对象的地址是否相等,若不相等再进行下面的成员变量判断。

    但这个方法体是完全可以由我们自己实现的,即便是我们直接 return true 都是可以的,只要能满足我们的业务需求,怎样写都是无所谓的,因此,equals比较的并不一定是对象的内容,它还可以由其他的信息来指导比较。

    文中不当之处欢迎大佬们指教或提出异议。

    展开全文
  • 主要介绍了java中如何区分==和equals,文中讲解的非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • 在本文中小编给大家整理了关于Java==和equals的区别以及相关知识点,有兴趣的朋友们学习下。
  • ==和equals区别

    千次阅读 2021-08-25 10:31:39
    ==和equals区别:equals重写object类中hash方法
  • ==和equals的区别

    2013-09-10 14:27:19
    java中比较值大小,==和equals的区别,基本数据类型和引用数据类型比较值方法
  • Java中==和equals的区别和联系.pdf
  • ==和equals() 的比较

    2021-01-21 16:56:33
    ==和 equals ()都是用于相等型判断的操作符 == 操作符用来判断两个引用是否指的同一个对象,或两个简单类型的值是否相等 即: [ == 比较值类型数据,比较的是值, 而引用类型对象比较的是地址] equals() 方法用来判断...
  • (Java面试基础)==和equals的区别

    千次阅读 多人点赞 2019-07-31 16:42:11
    ==和equals的区别
  • 主要介绍了C#中的 == 和equals()的区别,对不同点进行了阐述,感兴趣的小伙伴们可以参考一下
  • C#中==和Equals的区别

    2018-07-26 15:35:59
    ==和Equals比较的内容都是一致的,都是比较内容 引用数据类型 除了String之外 == Equals 比较首地址是否相等 比较值是否相等 String数据类型 利用反编译工具,查看String源码,可以看到...
  • Java中的==和equals区别

    2013-01-30 10:23:46
    详细介绍和讲解Java中的==和equals区别
  • scala中eq,==和equals的区别

    千次阅读 2019-08-28 13:43:58
    scala中eq,==和equals的区别 equals比较的是值是否相等 eq比较的是 地址是否相等 ==,如果比较的对象是null,==调用的是eq方法,如果比较的对象不是null,==调用的是equals方法 ...
  • 知识点 比较运算符==和equals方法的比较 知识点 比较运算符==和equals方法的比较
  • Integer 类缓存== equals

    千次阅读 2019-12-31 14:38:20
    Integer 类缓存== equals 对于 Integer var = ? 在-128 至 127 范围内的赋值, Integer 对象是在IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的...
  • 关于字符串==和equals的区别 ==对象相同 equals对象内容相同 String str1 = "hello"; String str2 = "hello"; String str3 = new String("hello"); String str4 = new String("hello"); System.out.println(...
  • Java ==和Equals方法的比较

    万次阅读 热门讨论 2017-05-06 09:57:45
    最近抽时间将Java基础又进行了学习,经过这段时间发现将许多之前自己模糊的地方,又清晰了许多,这次主要为大家分享一下对==和Equals重新认识; 【比一比】 1、Java中分为基本类型和对象类型两种; 2、对于...
  • 1、值不同,使用==和equals比较都返回false 2、值相同 使用==比较: 基本类型-基本类型、基本类型-包装对象返回true 包装对象-包装对象返回false 缓存中去的包装对象比较返回true(JVM 缓存部分基本...
  • Java中==和equals的区别

    千次阅读 2017-10-23 09:00:55
    Java中==和equals的区别
  • java 中==和equals的区别

    千次阅读 2016-04-20 17:33:39
    == 和 equals 的区别  1. == 是一个运算符。  2.equals则是string对象的方法,可以.(点)出来。    我们比较无非就是这两种 1、基本数据类型比较 2、引用对象比较  1、基本数据类型比较 ... ==和equals
  • JAVA中==和equals的区别

    千次阅读 2018-07-18 11:06:02
    在JAVA中,==和equals两者都是比较是否相等,但是比较的对象有所不同。在开始讲两者的区别之前我们先来了解一下JAVA虚拟机中的内存结构。 Java最主要的三块内存: 栈——是线程私有的,用来存放局部变量(对象引用...
  • java中==和equals引发的思考

    千次阅读 2021-03-24 16:10:16
    ==和equals有什么区别?这似乎是一道非常基础的面试题。 众所周知,==是比较地址,equals是比较数值。 那么问题来了。直接上代码 代码 public static void test20(){ Integer a1 = 10; Integer a2 = 10; ...
  • = =和equals的区别,break和continue的区别

    千次阅读 2020-05-15 23:39:24
    = =和equals的区别: equals和==最大的区别是一个是方法一 个是运算符。 ==:如果比较的对象是基本数据类型,则此较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象的地址值是否相等。 equals():用来比较...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,149,044
精华内容 459,617
关键字:

==和equals