自整理3 值传递和引用传递

java的值传递和引用传递

首先,由于java没有指针机制,所有java归根究底只有值传递,没有引用传递。
java中所谓对象(数组,类,接口)的引用传递,实际上是对于该对象的地址的值传递.

那么这里可以对String和StringBuffer的传递方式做一个推论:

String和StringBuffer都是引用类型

作为参数传入的时候是传递的其地址,但是如果出现赋值操作,比如String = “x”,String = new String(“xx”)
意味着开辟新的内存空间并赋值给String,此时原来的内容的地址已被丢弃,故看上去变成修改了String的内容,但方法外面的内容却不变
Stringbuffer的append方法本质上没有开辟新的内存空间,只是在原有空间上拓展,那么看上去就是修改内容,方法外面的内容也跟着修改了,但是实际上,你对Stringbuffer进行new的赋值的话,那么它和String就一样了。

2018.03.20新增

String的特殊性在这里补充一下。

String特殊在jvm对String有专门的处理方式,如果你使用String s = new String(“xx”),那么你调用的是String类的构造方法,获得的是一个对象(存放在堆中),如果你使用String s = "xx",jvm会检查内存的常量区有没有“xx”,有则s的值实际上是“xx”的地址,如果没有,就在常量区创建一个字符串“xx”,把该字符串的地址赋值给s。

给个解释这个情况的链接:java-字符串的创建和存储机制

至于String为什么会出现这么麻烦的情况,下回补充。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,803评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,147评论 0 62
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 周鸣鹿又问:“那你为什么又这样?”说着指了指他身上的绳子。 “不知道,我刚进来,突然眼前一黑,就感觉有人拿着绳子把...
    阳城鱼king阅读 351评论 0 2
  • 今天一大早,老公就回老家摘梅李子。晚上和张晶两口子吃的火锅。 今日下雨,冷,穿起长袖长裤。 明日返宜。 这两天看了...
    Daisy2014阅读 319评论 0 1