精华内容
下载资源
问答
  • Java=和==和===的区别

    万次阅读 2018-06-23 21:19:35
    Java中=是赋值运算,而==判断值是否相等,===是判断的是值及类型是否完全相等,而===只在JavaScript中有比如a=b 就是把b的值赋予给a;a==b 就是判断a等于b下面是判断==运算符比较的两个值是否相等的判断条件:1.如果两...

    Java中=是赋值运算,而==判断值是否相等,===是判断的是值及类型是否完全相等,而===只在JavaScript中有

    比如

    a=b 就是把b的值赋予给a;


    a==b 就是判断a等于b


    1.下面是判断==运算符比较的两个值是否相等的判断条件:

    1.如果两个值具有相同的类型,那么就检测它们的等同性。如果这两个值完全相同,它们就相等。如果它们不完全相同,则它们不相等。

    2.如果两个值的类型不同,它们仍然可能相等。用下面的规则和类型转换来检测它们的相等性:

    01.如果一个值是null,另一个值是undefined,它们相等。

    02.如果一个值是数字,另一个值是字符串,把字符串转换为数字,再用转换后的值进行比较。

    03.如果一个值为true,将它转化为1,再进行比较。如果一个值为false,把它转化为0,再进行比较。

    04.如果一个值是对象,另一个值是数字或字符串,将对象转换成原始类型的值,再做比较。可以使用对象的toString()方法或 valueOf()方法把对象转化成原始类型的值。JavaScript核心语言的内部类通常先尝试valueOf()方法转换,再尝试toString()方法转换,但是对于Date类,则先执行toString()方法再执行valueOf()方法转换。不属于JavaScript核心语言的对象则可以采用 JavaScript实现定义的方式把自身转换成原始数值。

    05.其他的组合,不相等。


    2.下面是判断===比较的两个值是否相等的判断条件:

    1.如果两个值的类型不同,它们就不相同。

    2.如果两个值是数字,而且值相同,除非其中一个或两个都是NaN(这种情况它们不是等同的),否则它们是等同的。值NaN永远不会与其他任何值等同,包括它自身,要检测一个值是否是NaN,可以使用全局函数isNaN()。

    3.如果两个值都是字符串,而且在字符串中同一位置上的字符完全相同,那么它们就完全等同。如果字符串的长度或内容不同,它们就不是等同的。

    4.如果两个值都是布尔型true,或者两个值都是布尔型false,那么它们等同。

    5.如果两个值引用的是同一个对象、数组或函数,那么它们完全等同。如果它们引用的是不同的对象(数组或函数),它们就不完全等同,即使这两个对象具有完全相同的属性,或两个数组具有完全相同的元素。

    6.如果两个值都是null或都是undefined,它们完全相同。

    展开全文
  • 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比较的并不一定是对象的内容,它还可以由其他的信息来指导比较。

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

    展开全文
  • Java1==Java2?Java1:Java2问题

    千次阅读 2018-02-23 16:00:45
    今天写过一段代码,然后通过技术经理的代码评审后,对这段代码进行了很大的优化,原本4行优化成1行,经验还是重在积累~分享一下~希望自己越来越懂很多~~加油如下图:  String userNos=(java1==java2)?java1:java3;...

    今天写过一段代码,然后通过技术经理的代码评审后,对这段代码进行了很大的优化,原本4行优化成1行,经验还是重在积累~

    分享一下~希望自己越来越懂很多~~加油

    如下图:

            String userNos=(java1==java2)?java1:java3;这一行代码相当于注释的代码,这行代码是优化后的写法。


    不造你是否get了这个新技能呢?~~~


    展开全文
  • Java中==号与equals()方法的区别

    万次阅读 多人点赞 2016-11-01 17:29:08
    那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的...

    ==号和equals()方法都是比较是否相等的方法,那它们有什么区别和联系呢?
    首先,==号在比较基本数据类型时比较的是值,而用==号比较两个对象时比较的是两个对象的地址值:

    int x = 10;
    int y = 10;
    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(x == y); // 输出true
    System.out.println(str1 == str2); // 输出false
    

    那equals()方法呢?我们可以通过查看源码知道,equals()方法存在于Object类中,因为Object类是所有类的直接或间接父类,也就是说所有的类中的equals()方法都继承自Object类,而通过源码我们发现,Object类中equals()方法底层依赖的是==号,那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的值:
    这里写图片描述
    这里我自己定义了一个Student类,没有重写equals()方法,最后的输出结果是:false

    这里写图片描述
    在我重写了equals()方法后,输出结果变成了true。

    现在一些基本的已经讲的差不多了,接下来我们回到第一个例子:

    String str1 = new String("abc");
    String str2 = new String("abc");
    System.out.println(str1.equals(str2));
    System.out.println(str1 == str2);
    

    根据上面所讲,第一个是true,第二个是false,确实如此,那继续看下面的例子:

    String s1 = "abc";
    String s2 = "abc";
    System.out.println(s1.equals(s2));
    System.out.println(s1 == s2);
    

    这次的结果和上一个的是一样的吗?答案是:true true
    为什么第二个会是true呢?
    这就涉及到了内存中的常量池,常量池属于方法区的一部分,当运行到s1创建对象时,如果常量池中没有,就在常量池中创建一个对象"abc",第二次创建的时候,就直接使用,所以两次创建的对象其实是同一个对象,它们的地址值相等。

    那上一个例子中的

    String str1 = new String("abc");
    

    是怎么回事呢?
    这里其实创建了两次对象,一次是在常量池中创建了对象"abc",一次是在堆内存中创建了对象str1,所以str1和str2的地址值不相等。

    展开全文
  • java null==null是否成立

    千次阅读 2019-09-06 15:47:16
    看Arrys.equals()源码的时候,第一行是判断两个参数是否==,突然很好奇,如果==号两边都是null这种写法是否可行,可行的话结果是true还是false? public static boolean equals(int[] a, int[] a2) { ...
  • JavaJava中的==

    千次阅读 2019-07-14 21:47:08
    Java中的== Java中的==表示的是什么呢?有时候很令人费解。比如,以下例子输出是什么? // 例一 String str = "wo"; String str1 = "wo"; System.out.println("例一:" + (str == str1)); // 例二...
  • Java +=, -=, *=, /=, %=

    千次阅读 2020-02-04 15:18:26
    今天在复习基础查缺补漏到了赋值运算这里,哈哈哈,嘲笑一下自己.因为有些平时用的也不多,所以打算写两行代码跑一下,但是 int a = 10; int b = 20; System.out.println("a+=b: "+(a+=b)); System.out.println("a-=b: ...
  • 作为java新手,在java中写判断时,发现当某个数值==或!=0时,直接条过此判断,刚开始很懵,不知道怎么回事,如下代码 String reason= addIntegralModel.getReason(); if (reason == 0){ addIntegralModel....
  • java中==与equeals的区别

    千次阅读 2017-11-10 21:15:39
    ==是比较两个变量的值,如果是基本数据类型,那么就是比较的基本数据的大小值 int a=1; int b=1; System.out.println(a==b);上面代码的图解: 以上图中:==比较的就是上面两个内存块中的值,都是1,所以是true ...
  • Java 中 == 比较的是什么?

    千次阅读 2019-03-31 00:19:28
    1、对于对象引用类型:“==”比较的是对象的内存地址。 例子: public class ArrayTest { public static void main(String[] args) { String a = new String("aw"); String b = new String("aw");...
  • 深入理解java中==和equals的用法

    千次阅读 多人点赞 2018-10-23 17:13:41
    那么,在所有没有重写equals()方法的类中,调用equals()方法其实和使用==号的效果一样,也是比较的地址值,然而,Java提供的所有类中,绝大多数类都重写了equals()方法,重写后的equals()方法一般都是比较两个对象的...
  • java中==和eqals和区别

    千次阅读 2016-03-31 12:46:07
    ==用于比较数据是否相等,如果用它在比较对象的话,它只能比较对象在栈(栈用来保存对象的引用,对象的的内容放在堆里面,由栈的引用指向他,java里的数组也是如此。)的内容是否相同。而eqals函数用来比较对象的...
  • Java中 = 和 += 的区别

    万次阅读 2017-05-25 15:16:36
    问题 1) short s1 = 1; s1 = s1+1;有什么错? 2) short s1 = 1; s1 += 1;有错吗?...1)+:在编译器将右边的表达式结果计算出来后,和左边的变量类型比较精度,如果左边的变量精度低于右边的结果的精度,编译器会显式的...
  • public class AutoboxingTest { public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Integer e = 321; Integer f = 321; Long g = 3L;...}
  • java中==和equals的区别是什么?

    万次阅读 热门讨论 2019-09-02 09:44:17
    == 是java提供的等于比较运算符,用来比较两个变量指向的内存地址是否相同.而equals()是Object提供的一个方法.Object中equals()方法的默认实现就是返回两个对象==的比较结果.但是equals()可以被重写,所以我们在具体...
  • 为什么Java中1000==1000为false而100==100为true?

    千次阅读 多人点赞 2016-04-27 15:58:45
    如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。 所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似—— Integer c =...
  • Java中关于==与equal的比较

    千次阅读 2016-10-15 11:41:11
    java面试中常常会遇到考官问道java中==与equal的区别,这里参考了各方面的资料做一个总结。
  • java中的==和equal()比较

    万次阅读 2019-01-01 21:21:12
    浅谈Java中的equals和==  在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println...
  • java i=i+2与i+=2的区别

    2017-09-16 07:19:25
    import java.util.*; public class lianxi { public static void main(String[] args) { int N=3; int[][] a = new int[N][N]; int i=0; //行 int j=N/2; //列 a[i][j]=1; for(int n=2;n<=N*N;n...
  • java 中+= 、=、=+ 的区别

    千次阅读 2017-05-09 14:08:38
    //编译器会报 int型不能转为short类型 默认数字1为int类型 a在与1相加后等号右边会为int类型 ,但是当赋值到a时,会发生错误,在java中高类型不能隐式赋值为低类型。 a = (short)(a+1); //此为将
  • java i=i++和j=i++的区别

    万次阅读 2018-04-27 13:52:00
    i=i++-----------在java中 这个语句的前后顺序应该是这样的(tmp=i;i++;tmp==i) java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,...
  • Java语言中==和equals的区别详解

    千次阅读 2017-03-04 18:46:14
    首先,Java中的==比较的是两个对象的引用的地址是否一样,如下: Person a = new Person(); Person b = new Person(); Person c = a; System.out.print(a==b); System.out.print(a==c); 执行结果为 false true ...
  • Java中list==null与list.size( )==0的区别

    千次阅读 2018-06-20 11:37:17
    1.list==null,意味着list压根没有地址,在堆内就不存在。2.list.size( )= 0,意思是堆内有list,但是还没有放元素,其长度随着元素数量变化而变化,暂时为零。3.list如果为null的话,说明没有进行初始化。...
  • java 字符串<=======>时间戳 相互转换

    万次阅读 2011-07-27 12:00:51
    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class TestTime { public static void ma
  • Java中如何判断两个对象是否相等(Java equals and ==)

    万次阅读 多人点赞 2017-12-15 02:16:13
    java中本质上是散列表的类常见的有HashMap,HashSet,HashTable 所以,如果一个对象一定不会在散列表中使用,那么是没有必要复写hashCode方法的。但一般情况下我们还是会复写hashCode方法,因为谁能保证这个对象...
  • java】Integer == Integer?

    千次阅读 2012-12-15 12:19:31
    //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer; //调用Integer的静态方法 valueOf,构建整型值为3的Integer对象 8: astore_3 //将引用存入局部变量3 9: iconst_3 10: invokestatic #2; //Method ...
  • java中null==1这种判断会抛空指针

    千次阅读 2019-07-08 17:13:30
    null==1这种判断会抛空指针

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 938,717
精华内容 375,486
关键字:

java=

java 订阅