`
zhangcong170
  • 浏览: 71192 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java的equeals方法和==方法的比较

    博客分类:
  • j2se
阅读更多

      我们知道,在java中,equals()方法和==方法是有比较大的区别的,equals()方法执行的是值的比较,而==方法执行的是地址的比较,也就是对象的引用的比较。现在我们来看一段代码

   

Integer a=new Integer(1);
Integer b=new Integer(1);
System.out.println("测试equals方法 "+a.equals(b));
System.out.println("测试==方法 "+(a==b));
System.out.println("******************");
String a1="a";
String a2="a";
System.out.println("测试equeals方法 "+a1.equals(a2));
System.out.println("测试==方法  "+(a1==a2));

 输出结果如下:

测试equals方法 true
测试==方法 false
******************
测试equeals方法 true
测试==方法  true

      对于Integer对象,由于a和b是两个不同的Integer对象,但是它们的值是相同的,所以执行equals方法为true,而执行==方法明显为false,两个对象不同,当然它们在内存中的地址就不相同了。

      但是,当我们以这种方式去看String时,就开始困惑了,其实这就是String对象和普通的java对象不同之所在。当执行String a1="a";String a2="a";时,a1和a2是指向共同的内存的!他们指向相同的地址,所以无论是equals方法还是==方法,二者的结果均为true。但是,如果我们修改其中的一个String对象,会不会对另一个对象的值有影响呢?请看如下代码:

      

a1="a1";
System.out.println(a1);
System.out.println(a2);

 输出结果如下:

 

a1=a1
a2=a

      a1与a2的值又不同了!这真是奇怪了,在执行a1="a1"之前,a1与a2明明指向相同的内存地址,为什么当a1改变时却对a2没有任何的影响呢?

      原来,当执行a1="a1";时,系统会在内存中重新划分一块区域存放“a1”这个字符串,并将Sting变量a1指向这个地址,也就是说,a1指向的地址发生了改变!这就是String与一般类型的区别,当Stiring的值发生改变时,它会重新分配内存区域。所以a1和a2的值不相同,改变它们的任何一个,都不会对另外一个产生影响。

0
0
分享到:
评论

相关推荐

    java 资料 equals 与== 的区别

    在上面的例子中,str1 和 str2 是两个字符串对象,equals 方法比较的是它们的值,因为它们的值相等,所以输出“对象 str1 和对象 str2 的值相等”。 == 运算符比较的是变量的值或内存地址,而 equals 方法比较的是...

    java中equals和==的区别.pdf

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象的工具,但它们之间有着显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,`equals()`方法是`java.lang.Object`类的一个成员方法...

    java基础之 “==”与“equals”区别详解

    对于引用类型来说,“==”操作符比较的是对象的引用是否相同,而equals()方法比较的是对象的值是否相同。 5. String类中的equals()方法: 在String类中,equals()方法被重写,以便比较字符串的值。String类中的...

    Java基础复习(内附String中equals与==区别的分析)

    本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...

    equal与==区别

    如果试图使用`.equals()`方法比较基本数据类型,将会出现编译错误。 示例代码: ```java int a = 123; int b = 123; System.out.println(a == b); // true,因为a和b的值相同 // System.out.println(a.equals(b)); ...

    Java中BigDecimal的加减乘除、比较大小与使用注意事项

    2. **比较**:不推荐使用`equals()`方法比较`BigDecimal`对象,因为`equals()`会考虑它们的`scale`(小数位数)。建议使用`compareTo()`方法进行数值上的比较。 3. **构造与精度**:创建`BigDecimal`时,需要考虑...

    ==和equals方法究竟有什么区别

    在Java编程语言中,`==`和`equals()`方法是用来比较对象之间关系的两种常见方式,但它们在使用上有着显著的区别。 首先,`==`运算符主要用于比较基本类型(如int、char、byte等)的值是否相等,或者比较引用类型...

    JAVA常用类和方法

    ### JAVA常用类和方法知识点详解 #### 一、字符串处理 **1. 获取字符串长度** - **方法**: `length()` - **用途**: 返回字符串的长度。 - **示例**: ```java String str = "Hello"; int len = str.length...

    ==与equals的比较

    "Java中的==和equals方法比较" 在Java中,`==`和`equals`是两种不同的比较方法,前者比较引用地址,而后者比较对象的实际内容。 首先,让我们来看看`==`运算符的用法。`==`运算符可以用来比较基本数据类型和引用...

    java 泛型方法使用示例

    Java 泛型是Java SE 5.0引入的一...以上就是关于Java泛型方法的基本介绍和使用示例,希望对你有所帮助。如果你想要进一步了解或实践,可以参考提供的`GenericMethod.java`源代码文件,或者查阅`Java.jpg`中的相关图片。

    java中main方法发送httpPost请求

    这里我们将深入探讨如何在Java的main方法中实现这个功能,以及相关的HTTP请求和响应处理。 首先,Java中发送HTTP POST请求通常会用到`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp。下面我们将...

    JAVA中三种URL连接方法

    ### JAVA中三种URL连接方法详解 #### 引言 在JAVA编程中,处理网络资源的能力是必不可少的。通过JAVA的`java.net`包,开发者能够轻松地与远程服务器交互,获取或发送数据。本文将深入探讨JAVA中三种常见的URL连接...

    java equals和==的区别详解

    在Java编程语言中,`equals()` 和 `==` 运算符在比较对象时有着显著的不同。理解这两者的区别对于编写高效、可靠的代码至关重要。以下是它们的详细解释: 1. **`==` 运算符**: `==` 在Java中主要用于比较基本类型...

    java代码-== equals测试

    在Java编程语言中,`==` 和 `equals()` 是两种常用的比较操作符,但它们的用法和含义有所不同。本文将深入探讨这两个概念,并通过实际的代码示例进行测试和解释。 首先,`==` 操作符用于基本类型(如 int、char、...

    java解析wsdl文档获取方法与参数

    本文将深入探讨如何使用Java来解析WSDL文档,提取其中的方法和参数。 首先,理解WSDL的基本结构是必要的。一个WSDL文件通常包含服务定义、消息定义、端点(port)定义以及绑定定义。服务定义指明了服务的名称,消息...

    java方法调用

    ### Java方法调用详解 #### 一、方法调用概览 在Java编程语言中,方法(也称为函数)是程序的基本构建块之一,用于封装特定功能以便在需要时重复使用。方法调用是实现这一功能的关键步骤。通过调用方法,我们可以...

    java数组与方法数组的定义及使用

    理解并熟练使用Java中的数组和方法数组对于编写高效、可维护的代码至关重要。数组提供了有序的数据结构,而方法数组则允许我们存储和处理一系列操作。在实际编程中,数组常用于缓存、数据处理和算法实现,而方法数组...

    在linux和windows下动态设置classpath调用java类方法脚本代码

    本文将详细讲解如何在Linux和Windows操作系统下动态设置classpath以调用Java类方法,并提供实际示例和文档。 一、Linux环境下设置classpath 在Linux系统中,你可以通过以下几种方式设置classpath: 1. **命令行...

    java反射,获取所有属性、方法以及List集合类

    对于私有字段和方法,可以使用`setAccessible(true)`来绕过访问限制。这需要谨慎使用,因为可能破坏封装性。 ```java field.setAccessible(true); field.set(obj, newValue); ``` 总结来说,Java反射提供了一...

Global site tag (gtag.js) - Google Analytics