我们知道,在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的值不相同,改变它们的任何一个,都不会对另外一个产生影响。
分享到:
相关推荐
在上面的例子中,str1 和 str2 是两个字符串对象,equals 方法比较的是它们的值,因为它们的值相等,所以输出“对象 str1 和对象 str2 的值相等”。 == 运算符比较的是变量的值或内存地址,而 equals 方法比较的是...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象的工具,但它们之间有着显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,`equals()`方法是`java.lang.Object`类的一个成员方法...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象的工具,但它们之间存在着显著的区别。理解这些差异对于编写...在使用自定义类时,如果希望`equals()`方法比较对象的内容,记得在类中重写它。
使用 equals() 方法比较 Integer 对象 为了正确地比较两个 Integer 对象,我们应该使用 equals() 方法,而不是使用 "==" 运算符。equals() 方法将比较两个对象的实际值,而不是它们的引用。 例如,在下面的代码中...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别和用法对于任何Java开发者来说都至关重要,特别是对于那些正在积累Java开发经验的人来说。 首先,让我们...
对于引用类型来说,“==”操作符比较的是对象的引用是否相同,而equals()方法比较的是对象的值是否相同。 5. String类中的equals()方法: 在String类中,equals()方法被重写,以便比较字符串的值。String类中的...
因此,即使 `str1` 和 `str3` 是不同的对象,它们的 `equals()` 方法比较内容后也会返回 `true`,因为它们包含相同的字符序列。 `intern()` 方法是 `String` 类的一个特殊方法,它会检查字符串常量池中是否存在与...
在Java编程语言中,`==`和`equals()`方法是用来比较对象之间关系的两种常见方式,但它们在使用上有着显著的区别。 首先,`==`运算符主要用于比较基本类型(如int、char、byte等)的值是否相等,或者比较引用类型...
### JAVA常用类和方法知识点详解 #### 一、字符串处理 **1. 获取字符串长度** - **方法**: `length()` - **用途**: 返回字符串的长度。 - **示例**: ```java String str = "Hello"; int len = str.length...
反射(Reflection)是Java的一个强大特性,允许程序在运行时检查类、接口、字段和方法等信息。本教程将深入探讨如何通过反射获取类、方法上的注解以及注解中的值和方法参数。 1. **注解的定义与使用** 注解以`@`...
"Java中的==和equals方法比较" 在Java中,`==`和`equals`是两种不同的比较方法,前者比较引用地址,而后者比较对象的实际内容。 首先,让我们来看看`==`运算符的用法。`==`运算符可以用来比较基本数据类型和引用...
Java 泛型是Java SE 5.0引入的一...以上就是关于Java泛型方法的基本介绍和使用示例,希望对你有所帮助。如果你想要进一步了解或实践,可以参考提供的`GenericMethod.java`源代码文件,或者查阅`Java.jpg`中的相关图片。
xmlns:java="cc.unmi.commons" exclude-result-prefixes="java"> ``` 2. **调用Java方法**:在XSLT模板中通过指定的前缀和完整的类名加方法名来调用Java方法,并传入相应的参数。 ```xml ...
这里我们将深入探讨如何在Java的main方法中实现这个功能,以及相关的HTTP请求和响应处理。 首先,Java中发送HTTP POST请求通常会用到`HttpURLConnection`类或者第三方库如Apache HttpClient或OkHttp。下面我们将...
Java作为一种广泛使用的编程语言,提供了处理WSDL文档的能力,帮助开发者获取服务中的方法和参数信息。本篇将深入探讨如何在Java中解析WSDL文档并提取关键细节。 首先,理解WSDL文档的结构至关重要。WSDL文档包含了...
本文将深入探讨如何使用Java来解析WSDL文档,提取其中的方法和参数。 首先,理解WSDL的基本结构是必要的。一个WSDL文件通常包含服务定义、消息定义、端点(port)定义以及绑定定义。服务定义指明了服务的名称,消息...
### Java方法实例详解 #### 获取环境变量与系统属性 在Java中,我们可以通过`System`类来获取环境变量以及系统的一些基本属性。 1. **获取环境变量:** ```java String path = System.getenv("PATH"); // 获取...
对于私有字段和方法,可以使用`setAccessible(true)`来绕过访问限制。这需要谨慎使用,因为可能破坏封装性。 ```java field.setAccessible(true); field.set(obj, newValue); ``` 总结来说,Java反射提供了一...