java string声明了还能再声明吗_String的声明问题解疑

JAVA中,String类和VB中有很多不同,和C的字符数组更有很大差别。

在这里举个例子:

public class StringTest {

public static void main(String[] args) {

String a="abc";

String b="abc";

String c=new String("abc");

System.out.println(a==b);//结果true

System.out.println(a==c);//结果false

a=a+“”;

System.out.println(a==b);//结果false

}

}

学过C/C++的同学可能会感觉十分不习惯,因为在Java里,a和b是引用,从语句来看,

是声明的两个对象,第一个结果处不应为true。但实际上Java将"abc"作为字符串常量

来处理,第一次声明a时,在堆中产生"abc",而在声明b时,则会在堆中查找"abc"这样

一个常量,如果有则令b指向它。所以本例中结果一显然是true。

那么同学们会问,为什么结果二为false呢,c不也是"abc"吗?其实不然,在Java中用

new关键字是会在堆中开辟一个新的空间,这是与直接给变量传一个字符串常量是不同

的。所以不管传给c的是何值,a都不会和c指向同一地址。

本例中结果三则向大家反映了这样一个事实。就是当给变量赋予与之前常量不同的字符串

值时,变量所指的地址也随之改变。在第三次测试中,a=a+""看似并没有改变变量的值,

但a本身是变量,不能按常量来处理,所以结果为false。如果将该句改为a="ab"+"c",

那么结果将变成true。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值