String字符串拼接陷阱

本文通过两个示例程序,解析了Java中对象引用传递的特点,以及String类型作为final类型不可变性的特性。第一个例子展示了对象引用传递导致的值变化,而第二个例子则深入探讨了String类型的数据在方法调用中如何保持不变。

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

先看如下程序:

对于一般类对象:

public class A {
int age = 10;
A(){}
}

public class Test{
public static void changeAage(A a){
a.age = 20;
}
public static void main(String[] args){
A a = new A();
changeAage(a);
System.out.println(a.age);

}

结果我们应该都能猜到:是的,值改变为:20   (传递的为a对象的引用(地址))

再看如下程序:

public class Test {
public static void changePara(String s){
s = s+"world";
}

public static void main(String[] args){
String s = "Hello";
changePara(s);
System.out.println(s);
}
}

输出的结果实多少? Helloworld?, 

实际上是:Hello


//我们在看以下程序你就知道为什么输出的是Hello,而不是HelloWorld了

public class Test{
public static void main(String[] args){

String s2 = "123";
System.out.println(s2.hashCode());
s2 = s2 + "456";
System.out.println(s2.hashCode());
}
}

结果是:

48690
1450575459

原来他们并不是同一个对象的引用,他们的值发生了变化。

原因:String类型数据其实是final类型,它的值并不能改变!要改变的其值就是:重新生成一个对象。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值