== 和 equals() 方法的区别
2024-09-04 06:03:10
== 在比较基本数据类型时,是比较两边的数据的值是否相等
// 整数类型
int num1 = 1;
// 双精度浮点数类型
double num2 = 1.0;
// 输出结果为 true
System.out.println(num1 == num2);
== 在比较引用数据类型时,比较的是两边对象的内存地址,也就是判断两个对象是否指向同一个内存对象
// 第一种情况
// 定义一个字符串str1
String str1 = "test";
// 将定义的字符串直接赋给str2,其实只是将对象str1的引用赋给了str2,此时两个对象指向同一个内存对象
String str2 = str1;
// 输出结果为 true
System.out.println(str1 == str2); // 第二种情况
// 定义一个字符串str1
String str1 = "test";
// 对于字符串类型,简单第一次创建一个字符串时,会在方法区中的常量池里面创建一个字符串
// 等第二次在创建一个同样的字符串时,内存中不会再创建一个新的同样的字符串,而是直接将旧的字符串引用赋过去
String str2 = "test";
// 输出结果为 true
System.out.println(str1 == str2); // 第三种情况
// 使用new关键字在内存中创建一个对象str1
String str1 = new String("test");
// 使用new关键字在内存中创建一个对象str2
String str2 = new String("test");
// 使用new关键字是在内存中创建新的对象,两个对象在内存中指向的内存地址不一样,输出结果为 false
System.out.println(str1 == str2);
Object类中的equals()方法
- 在Object类中的方法底层采用的其实是使用==进行比较,也就是说如果子类不对equals()方法进行重写默认比较的还是两个对象的内存地址(String类型除外,因为String类重写了equals()方法,比较的是两个字符串的内容)
/**
* 如果子类不对equals()方法进行重写默认比较的还是两个对象的内存地址
* @anObject 需要比较的对象
* @return 指向同一个对象返回true,否则返回false
*/
public boolean equals(Object obj) {
return (this == obj);
}
String类中的equals()方法
/**
* String类重写了Object类中的equals()方法,比较的是两个字符串的内容
* @anObject 需要比较的对象
* @return 两个字符串相等返回true,否则返回false
*/
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;
}
例如:
// 定义一个字符串str1
String str1 = new String("test");
// 将定义的字符串直接赋给str2
String str2 = new String("test");
// 因为String类重写了Object类中的equals()方法,比较的是两个字符串的内容,输出结果为 true
System.out.println(str1.equals(str1));
最新文章
- x64内联汇编注意点
- 使用Lamda生成函数
- symbol(s) not found for architecture x86_64 之 linker command failed with exit code 1 (use -v to see invocation)解决方案排查
- zoj 3717 - Balloon(2-SAT)
- IOS 免受xib自动布局影响
- Laravel-Administrator enum使用数字key
- (hdu)5546 Ancient Go
- Mustache学习
- hdu1151+poj2594(最小路径覆盖)
- 无法启动T-SQL调试。未能连接到计算机";.";。这是在主机名解析时通常出现的暂时错误……
- 开涛spring3(6.3) - AOP 之 6.3 基于Schema的AOP
- [编织消息框架][JAVA核心技术]动态代理应用7-IRpcSend实现
- bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
- Android 读取清单文件<;meta-data>;元素的数据
- python10--函数的来源,优点,定义,组成,使用(定义,调用)函数的分类,函数的返回值
- SSM框架指的是什么
- python 类的介绍
- 序列化 java.io.Serializable
- 未能加载或程序集“XXXX,Version=0.0.0.0,Culter=neutral,PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。
- kubernetes系列(一)安装和配置
热门文章
- bash执行顺序:alias -->; function -->; builtin -->; program
- 电路维修(双端队列 &; 最短路)
- Java之父 James Gosling 发表博文 《Too Soon》纪念乔布斯。
- 腾讯云星星海SA2云服务器特点
- 前端---梳理 http 知识体系 1
- Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused
- fork()和vfork()的区别,signal函数用法,exec()系列函数的用法小结
- 讲分布式唯一id,这篇文章很实在
- Charles抓包 mock数据和rewrite功能
- Mybatis:插入数据返回自增主键