文档章节

Java传值问题

那位先生
 那位先生
发布于 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时 引用不会变,但是,引用所指向的值变了,所以就达到了“传引用”的效果

© 著作权归作者所有

共有 人打赏支持
那位先生
粉丝 130
博文 58
码字总数 65010
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
9分钟前
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
11分钟前
0
0
Nginix开启SSL支持HTTPS访问(自签名方法)

Nginix开启SSL支持HTTPS访问(自签名方法) 超文本传输安全协议(缩写:HTTPS,英语:Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器...

openthings
27分钟前
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部