java equals和=,==的区别详细介绍_java

Java中equals和==的区别

java中的数据类型,可分为两类:

1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 

  他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类) 

  当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。

  对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

java  equals和=,==的区别

一. ==和equals的区别

1. ==是运算符

2. equals是String对象的方法

一般有两种类型的比较

1. 基本数据类型的比较

2. 引用对象的比较

1. 基本数据类型的比较

==和equals都比较的是值是否相等,相等则为true,否则为false

2. 引用对象的比较

==和equals都是比较是栈内存中的地址是否相等,相等则为true,否则为false

注意:

1. String是一个特殊的引用数据类型,==比较的是字符串对象的引用地址是否一样,equals比较的是栈中的内容是否一致。

 String ss = new String("abc");
 String sss = new String("abc");

 if(ss == sss){
  System.out.println("ss == sss is true");
 }
 if(ss.equals(sss)){
  System.out.println("ss equals sss is true");
 }

控制台输出:

ss != sss
ss equals sss

表明:ss和sss在栈中的内存地址不同,但是在堆中的内容是相同的。

String ss = new String("abc");

String ssss = ss;

//判断ss和ssss在栈中的引用地址是否一样

  if(ss == ssss){
  System.out.println("ss == ssss");
 }else{
  System.out.println("ss != ssss");
 }

//判断ss和ssss在堆中的内容是否一样
  if(ss.equals(ssss)){
  System.out.println("ss equals ssss");
 }else{
  System.out.println("ss not equals ssss");
 }

控制台输出:

ss == ssss
ss equals ssss

这表明ss和ssss是相同的对象,并且他们在堆中的内容一样

2. 引用对象的比较

  TestBean obj1 = new TestBean();
  TestBean obj2 = new TestBean();
  TestBean obj3 = obj1;
  if(obj1 == obj2){
  System.out.println("obj1 == obj2");
  }else{
  System.out.println("obj1 != obj2");
  }

  if(obj1 == obj3){
  System.out.println("obj1 == obj3");
  }else{
  System.out.println("obj1 != obj3");
  }

控制台输出:

obj1!= obj2
obj1== obj3

表明obj1和obj2不是同一个对象,在栈中的引用地址不同

obj1和obj3是相同的对象,在栈中的引用地址相同

二. =和equals ==的区别

=表示的是赋值,即将=右边的值赋给左边的变量。equals和==是表示操作

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, equals
, 区别
, =
, ==
, equals和=
==的区别
java 和equals的区别、java equals 区别、java equals、java equals方法、java string equals,以便于您获取更多的相关知识。

时间: 2024-11-15 06:36:53

java equals和=,==的区别详细介绍_java的相关文章

JAVA JNI函数的注册过程详细介绍_java

JAVA JNI函数的注册过程详细介绍 我们在java中调用Native code的时候,一般是通过JNI来实现的,我们只需要在java类中加载本地.so库文件,并声明native方法,然后在需要调用的地方调用即可,至于java中native方法的具体实现,全部交给了Native层.我们要在java中正确地调用到本地代码中对应函数的前提是什么呢?答案就是通过一定的机制建立java中native方法和本地代码中函数的一一对应关系,那么这种机制是什么呢?就是JNI函数的注册机制. JNI函数的注册有

java String类常量池分析及"equals"和"==”区别详细介绍_java

java "equals"和"=="异同 首先简单说一下"equal"和"==" ==操作对于基本数据类型比较的是两个变量的值是否相等, 对于引用型变量表示的是两个变量在堆中存储的地址是否相同, 即栈中的内容是否相同 equals操作表示的两个变量是否是对同一个对象的引用, 即堆中的内容是否相同. 综上,==比较的是2个对象的地址,而equals比较的是2个对象的内容. 再简单介绍一下String类 String类 又称作不可

java equals和==的区别详解_java

大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中八大基本类型中自动变量的字面值(自动变量就是用int a = 1;这种形式来定义的变量).如果是自动变量比较值的话肯定是用==来比较,因为equals()是一个方法,所以必须由对象调用才可以用于比较.而自动变量既不是类的实例也不是类的引用所以不能用equals()方法. 2.boolean tem

java中静态变量和实例变量的区别详细介绍_java

运行效果: 控制台效果: ================================================== 代码部分 ================================================== /hello_test/src/com/b510/test/StaticTest.java 复制代码 代码如下: /**  *   */ package com.b510.test;  /**  * 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实

Java线程中sleep和wait的区别详细介绍_java

Java中的多线程是一种抢占式的机制,而不是分时机制.抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行. 共同点: 1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回. 2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException. 如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法.如果此刻线程B正在wait/sleep/

java 线程中start方法与run方法的区别详细介绍_java

线程中start方法与run方法的区别 在线程中,如果start方法依次调用run方法,为什么我们会选择去调用start方法?或者在java线程中调用start方法与run方法的区别在哪里?  这两个问题是两个非常流行的初学者级别的多线程面试问题.当一个Java程序员开始学习线程的时候,他们首先会学着去继承Thread类,重载run方法或者实现Runnable接口,实现run方法,然后调用Thread实例的start方法.但是当他拥有一些经验之后,他通过查看API文档或者其他途径会发现start

Java 常量与变量的区别详细介绍_java

       常量:其值不变即为常量. 语法: 数据类型 常量名 = 值; double PI = 3.14; 备注: 一般默认常量名大写. 变量与常量之间关系(量间关系) 先来一个简单的实例,好了解 Java 里变量与常量之间的关系. 下面的程序里声明了两种 Java 经常使用到的变量,分别为整型变量 num 与字符变量 ch.为它们赋值后,再把它们的值分别显示在控制台上: 下面的程序声明了两个变量,一个是整型,一个是字符型 public class TestJava{ public stat

java与c#的语法区别详细介绍_java

由C#转入Java一段时间了,总结下个人认为的Java同C#语法之间的不同之处,有不同意见之处还望各位海涵 刚学Java时觉得语法同C#大致是相同的(应该说C#同Java大致相同,毕竟人家微软的C#是有意模仿Java的语法习惯的) 比尔.盖茨曾经说过:"Java是最卓越的程序设计语言" 言归正传,下面探讨Java同C#的语法不同之处... 1,命名空间与包 C#为了把实现相似功能的类组织在一起,引入了命名空间的概念(namespace) Java中与此对应的东西叫做包(package)

Java中的Object类详细介绍_java

理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类.由于所有的类都继承在Object类,因此省略了extends Object关键字. 该类中主要有以下方法: toString(),getClass(),equals(),clone(),finalize(), 其中toString(),getClass(),equals是其中最重要的方法. 注意: Object类中的getClass(),notify(),notifyAll(),wait()等方法被定义为f