文档章节

Java传值问题

RNG今年S8冠军
 RNG今年S8冠军
发布于 2013/08/31 09:28
字数 410
阅读 65
收藏 0

前几天看【深入Java虚拟机】的时候看见关于Java的传值和传引用的问题,书上说Java一直都是传值的,而所谓的传引用实际上传的是“引用的值”(不是引用所指向的值),所以换句话说还是传值。

然后自己就做了几个测试

我先写了一个测试类

<!-- lang: java -->
public class Test{

public static void main(String []args){
Integer a =5;
System.out.println(test(a));//6
System.out.println(a);//5
}

public static Integer test(Integer b){
    b++;
    return b;
}
}

开始我以为输出的都会是6,因为对于类来说传的都是“引用值”,就像下面的StringBuffer

<!-- lang: java -->
public class Test1{
public static void main(String []args){
StringBuffer sb=new StringBuffer("asdf");
System.out.println(test(sb));//asdfh
System.out.println(sb);//asdfg
public static StringBuffer test(StringBuffer sb){
sb.append("h");}}

Integer和StringBuffer同样都是一个类,为什么前者就没有“传引用”的效果而后者就有呢?

后来在Java吧里问了一下 大致得出了结论

首先,由基本数据类型封装得来的类都是final,像String ,Long ,Integer... 所以他们的引用对象是不可以改变的,但是可以改变值,但是String,Long,Integer等类并没有提供内部方法来修改 引用所“指向”的值,而对于+或++等操作都是把结果重新放进一个new对象里,所以在test方法中Integer会重新new一个对象来存放结果 而对于StringBuffer来说,append()方法则是StringBuffer类的方法,专门用来修改内部值的,所以调用append时 引用不会变,但是,引用所指向的值变了,所以就达到了“传引用”的效果

© 著作权归作者所有

共有 人打赏支持
RNG今年S8冠军
粉丝 132
博文 59
码字总数 65305
作品 0
深圳
后端工程师
JVM基础:深入学习JVM堆与JVM栈

以前堆是干啥栈是干啥都知道,就是没连在一起想想。感觉讲的不错的一篇儿~~JVM栈解决程序的运行问题,即程序如何执行,或者说如何处理数据;JVM堆解决的是数据存储的问题,即数据怎么放、放在...

李星
2014/06/04
0
0
SpringMVC之接收请求参数和页面传参

Spring接收请求参数 1,使用HttpServletRequest获取 Java代码 @RequestMapping("/login.do") public String login(HttpServletRequest request){ String name = request.getParameter("name")......

白志华
2015/09/23
0
0
一句话读懂Threadlocal

threadlocal是把ThreadLocal实例作为key,要保持的对象作为值,设置到当前线程的ThreadLocalMap 中。因此数据是保存在当前线程中的。 ThreadLocalMap实例是作为java.lang.Thread的成员变量存...

jeff_han
2015/11/18
0
0
Java中的JVM基础:数据类型和堆栈

数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,...

疯狂的兔子
2015/03/26
0
0
Java中的引用和C++中引用的区别

用过java和C++的同学都知道在二者中均有引用的概念。但是这两个概念所代表的并不相同。 首先了解C++ 中引用的含义:“引用”即“别名”。C++中的引用代表的就是实际的存储空间。对其进行操作...

osDaniel
2013/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

各种开源汇编、反汇编引擎的非专业比较

由于平时业余兴趣和工作需要,研究过并使用过时下流行的各种开源的x86/64汇编和反汇编引擎。如果要对汇编指令进行分析和操作,要么自己研究Intel指令集写一个,要么就用现成的开源引擎。自己...

simpower
9分钟前
1
0
(4)添加vue-router

(4)添加vue-router 1 安装vue-router cnpm install vue-router --save 2 页面准备 新建目录/src/views/common,此目录下面建立4个组件404.vue、home.vue、login.vue、theme.vue。每个文件...

neumeng
11分钟前
1
0
高可用性系统在大众点评的实践与经验

背景 所谓高可用性指的是系统如何保证比较高的服务可用率,在出现故障时如何应对,包括及时发现、故障转移、尽快从故障中恢复等等。本文主要以点评的交易系统的演进为主来描述如何做到高可用...

Skqing
19分钟前
2
0
Network protocols

The network stack does serveral seemingly-impossible things. It does reliable transmission over our unreliable networks, usually without any detactable hiccups. It adapts smooth......

nao
20分钟前
1
0
Android 生命周期方法

1,onCreate(); 2,onStart(); 3,onResume(); //打开页面,前三个方法自动执行 4,onPause(); 5,onStop(); //打开其他页面,前一个页面执行这俩方法 6,onRestart(); //onStart(),onResume //当关闭...

lanyu96
27分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部