课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > 来说说String中的值传递
  • 来说说String中的值传递

    发布:昆明Java培训      来源:达内新闻      时间:2016-07-28

  • 首先需要注意的是,String是一个对象,所以它不属于8种基本数据类型。对象的默认值是null,所以String的默认值也是null;但是它拥有其它对象没有的一些特性,所以它属于一种特殊的对象。还需要明白的是,new String()和new String(“”)都是申明一个新的空字符串,记住是空串而不是null。

    Java的传递方式只有值传递,但是如果需要传递8种基本类型以外的对象时,这时候传递的就是这个对象的地址。举个例子,假设从A对象传递了一个地址给B对象,这时候地址对应的内容就改变了。A对象和B对象指向那个地址的内容对应的也一起变了。然而,8中基本类型没有一起改变。

    再举个例子,假设传递的内容是8种基本类型以外的String,这也属于一个实例,所以传递的也是地址。不同的是,它会表现出和基本数据类型相似的性质:

    String[] a1 = new String[1];

    a1[0] = "Tom";

    String[] a2 = a1.clone();

    System.out.println(a1[0]);

    System.out.println(a2[0]);

    a1[0] = "Mary"; // *:Assigned to a new address!

    System.out.println(a1[0]);//"Mary"

    System.out.println(a2[0]);//"Tom"

    总而言之就是“一个变,另一个不变”。那么该如何理解?其实很简单,我们来看有星号的那一行:一个新地址给了a1[0]。为什么呢,因为String是immutable class,要改变的话就必须重新new一个。想要让String实例变化,就要在heap上重新申请内存。内存中放一个值给Mary的String对象,靠地址传递。我们再来看看a2[0],它指向的是之前的那个String对象的地址,所以两者不同。这又跟8种基本类型的性质相似,就是一个变,另一个不变。

    还有一个需要注意的地方:String分为literal和object,不用new String("Mary")而用="Mary",就会建立一个String literal。同时,JVM会对它们做一个intern优化。所以只要String literal的字面量相同,就都是实例。结论就是,="Mary"这种建立String的方式,实际上建立的是String literal,并且只有在literal值不同时,才会申请新的内存。

    现在你明白,为什么Java中会出现类似值传递的原因了吗?还有更多关于Java学习方面的疑问的话,可以选择来达内Java培训班,专业的培训老师帮你解答一切关于Java的问题。我们在达内Java培训班等你。

    推荐文章

上一篇:Java程序员,招聘市场上格外抢手

下一篇:小米员工教你学Java

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:12/29

Java--零基础业余班

Java--零基础业余班

开班日期:12/29

Java--周末提升班

Java--周末提升班

开班日期:12/29

Java--零基础周末班

Java--零基础周末班

开班日期:12/29

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56