关于String的面试题和==和equals的更加详细说明

本文深入探讨Java中字符串的创建过程,分析new String与直接赋值的不同,以及字符串比较时==与equals的区别。通过具体示例,讲解常量池优化机制及字符串拼接原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. String s1=new String(“abc”)创建了几个对象?
    我们知道在内存中有常量池
    那么就好说了。
    1.现在栈中创建一个String s1
    2.然后常量池中创建"abc"
    3.new String 就是在堆中创建一个对象
    4.将常量池"abc"拿出来赋值给的new String 再将的地址传给String s1
    常量池”abc“ 和 new String 是两个对象

2.S1="abc“;S2=“abc”
s1==s2?
s1.equals(s2)?

两个都是ture

  • ==可以比较基本数据类型引用类型变量
    基本数据类型的变量,则直接比较其存储的 “值”是否相等
    引用类型比较的是地址,String是引用型比较地址 abc的地址为同一个。
  • .equals比较的是对象
    将当前对象(S1)和(S2)比较,当两个字符串一样时才返回ture

3.s1=new String(“abc”); s2=“abc”
s1==s2?
s1.equals(s2)?

==是false
equals为 ture

  • == 由上题知,引用类型比较的是地址。s1的地址为堆内存地址,s2为常量池地址

4.s1=“a”+“b”+“c”; s2=“abc”
s1==s2?
s1.equals(s2)?

还是两个ture
这里很多人会有疑问了。== 不应该是false么
这里涉及到JAVA的常量优化机制
在编译时s1=“abc”,当到了s2时,常量池中有”abc“直接用
所以 s1 == s2 是同一地址返回ture

5.s1=“ab”;s2"abc";
s3=s1+“c”
s3==s2?
s3.equals(s2)?

false ture
字符串拼接是通过tostring完成的,即s3的地址为toString的地址

### Java 中 `==` `equals()` 方法的区别 在 Java 编程语言中,`==` 操作符 `equals()` 方法用于不同的场景来比较两个实体。 对于基本数据类型,`==` 比较的是数值上的相等性。例如: ```java int a = 1; double b = 1.0; System.out.println(a == b); // 输出 true ``` 当涉及引用类型的比较时,情况有所不同。`==` 对于引用类型会检查两个引用是否指向同一个内存位置,即它们是否是指向同一对象的引用[^3]。 而 `equals()` 方法则更为灵活,默认情况下它继承自 `Object` 类,并且行为类似于 `==`,但是许多标准库类(比如 `String`, `Integer` 等)已经重写了此方法以便能够基于实际内容来进行有意义的对象间对比[^4]。 考虑如下例子展示两者的差异: ```java // 使用字符串作为演示 String str1 = new String("hello"); String str2 = new String("hello"); System.out.println(str1 == str2); // false, 不同实例 System.out.println(str1.equals(str2)); // true, 内容相同 ``` 值得注意的是,在尝试调用像整数这样的原始类型上调用 `.equals()` 将导致编译错误,因为这些类型不是对象也没有定义该方法[^2]。 因此,在编写代码时应当注意区分何时应该使用哪一个操作符或函数,以确保程序按预期工作。 #### 总结 - **`==`:** - 基本数据类型:比较值。 - 引用类型:比较地址/引用。 - **`.equals()`:** - 默认实现如同 `==` (针对引用),但对于某些类已被改写为更合理的语义上的一致性测试。 - 应用于需要关注内部状态而非物理身份的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值