Java语言琐碎细节2-String的问题

本文详细解析了Java中字符串操作中的两个关键概念:字符串相加与比较。通过实例代码,解释了字符串相加如何导致引用变化,并进一步探讨了这种变化对字符串比较结果的影响。文章旨在帮助开发者更好地理解Java字符串操作的底层机制。

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

          String问题好多人不是很清楚,这是以前的博文,详细的介绍了一下:点击打开链接

          还有一部分上一篇没有介绍到,现补充一下。

          看到好多都在问自字符串相加然后比较为什么不相等。下面简单说一下:

public class Final {
          String a;
           public Final(){
                  a="g";
           }
           public void display(){
                  System.out.println(a=="g");
           }
            public static void main(String []args){
                  Final f=new Final();
                  f.display();
          }
}
运行结果为true

        a和“g”都存在栈中的常量区,都指向同一个地址,所以为true。不明白的话可以参照开头博文的内容。主要说一说下面的情况。


public class Final {
         String a;
         public Final(){
                a="g";
          }
          public void display(){
                   System.out.println(a+a=="gg");
         }
          public static void main(String []args){
                   Final f=new Final();
                   f.display();
         }
}
运行结果为false

       为什么为false呢,我们用反编译工具反编译一下看看代码:

import java.io.PrintStream;

public class Final
{

	final String a = "g";

	public Final()
	{
	}

	public void display()
	{
		System.out.println((new StringBuilder(String.valueOf(a))).append(a).toString() == "gg");
	}

	public static void main(String args[])
	{
		Final f = new Final();
		f.display();
	}
}

         对比发现,a+a在程序执行的时候编译成了(new StringBuilder(String.valueOf(a))).append(a).toString()。生成了新的类,存在了堆中。==比较的是引用,所以造成了比较结果为false。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值