java传值和传引用问题

阿邹 等级 730 0 0
标签: 移动端

这个问题还是很常见的,如果你平常敲代码比较多你可能经常会遇到这个问题。如果你知道java这个机制,你可能还会一直在找代码的问题。java中的值传递和引用传递。

比如下面有这俩个方法

    private void updataValue(String s){
        s = "123";
    }

    private void updataValue(JSONObject object){
        object.put("a",12);
    }

如果我传递一个字符串进行,假设我原来的字符串是321,然后我调用了updataValue方法后输出的会是123,而原来的字符串输出的是321,这就是传值,传值就是拷贝,我们的基本类型和string都是这样。这种情景很符合初学者常规思路。但是如果现在我们定义一个json对象,假设原来对象json中a为21,然后我们调用updataValue方法后原来的对象就会改变,这是为什么?这是我们传进去的是一个引用,内存中不会开辟除新的内存块进行保存,所以会直接引用一个内存块,一对多的关系,所以不管我们在哪里改,都会相应改变原来的对象。

总结:基本类型和string传值是拷贝,其他对象则是引用相同的内存地址。

收藏
评论区

相关推荐

js之传值与传址/undefined和null/严格模式
传值与传址 基本数据类型有五种Undefined、Null、Boolean、Number和String 引用数据类型有两种object,array,fn 两种数据类型的区别: 1. 存储位置不同 原始数据类型直接存储在栈(stack)中简单数据段,占据空间小,大小固定,属于被频繁使用的数据,所以存储在栈中; 引用数据类型直接存
java传值和传引用问题
这个问题还是很常见的,如果你平常敲代码比较多你可能经常会遇到这个问题。如果你知道java这个机制,你可能还会一直在找代码的问题。java中的值传递和引用传递。比如下面有这俩个方法java private void updataValue(String s){ s "123"; } private void upd
Java中传值和传址
本文用一下代码说明: Java代码 [![收藏代码](http://static.oschina.net/uploads/img/201305/24084923_UHpC.png)](http://my.oschina.net/u/1012289/admin) 简单字符串String: 1. package luojing; 2. public
Java中只存在值传递
在Java中并不存在引用传递(即地址传递),对于变量(可以是基本数据类型,也可以是引用数据类型)而言,可以理解为就是一个地址。传递,存在着拷贝操作。举个列子: **1、在方法参数上,传递的是基本数据类型。** 定义了一个用于交换两个整型数的方法: public static void swap(int a, int b) { in
Java到底是引用传递还是值传递
前言 -- 前段时间在群里看到类似这样一个问题,下面的代码会输出什么呢? `public void test() {    String str = "hello";    change(str);    System.out.println(str); } private void change(String str) {   
Java只有值传递(Java值传递还是引用传递?)
转载请注明原文地址:[https://www.cnblogs.com/ygj0930/p/10830521.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.cnblogs.com%2Fygj0930%2Fp%2F10830521.html) 一:区分Java数据类型、变
Java对象的浅拷贝和深拷贝&&String类型的赋值
Java中的数据类型分为基本数据类型和引用数据类型。对于这两种数据类型,在进行赋值操作、方法传参或返回值时,会有值传递和引用(地址)传递的差别。 **浅拷贝**(Shallow Copy): ①对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。因为是两份不同的数据,所以对其中一个对象的该成员变量值进行修改,
Java里的按值传递与引用传递
按值传递还是按引用传递 ----------- 这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:“在Java里面参数传递都是按值传递”。事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解,至于称作按什么传递就不是个大问题了。 **1:按值传递是什么** 指的是在方法调用时,传递的参
Java面试中的值传递与引用传递
一、前言 ==== Java是值传递的,对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。对于对象型变量而言的,传递的是该对象地址的一个副本,,并不是原对象本身 ,这里也有人说是引用传递。由于副本的地址和原对象地址一致,因此对副本的值进行操作时,会同步改变原对象值。 **_但是一旦副本的地址被改变,副本的值的操作则不会影响原对象地址。(
java jsp_传值
1、创建客户端a1 ![](https://oscimg.oschina.net/oscnet/483cf3ca39c4871015114d5b3e01fc4c68c.png) ![](https://oscimg.oschina.net/oscnet/924a7a59755885115590dae324b0315919f.png) method默认为
java传值与引用的关系
        首先,我们必须要搞清楚的一件事是,不管java的参数类型是什么,一律传递的是参数的副本。也就是说每次传递参数的时候都会讲参数拷贝一份传递。 1.基本数据类型:         对于基本的数据类型来说,java传递的是指的副本;也就是将数据拷贝一份以后传递。因此当函数返回的时候,不管在调用的函数中做了什么操作,基本数据类型的值都不会改变。
java后端上传下载文件
**package** com.weshare.argus.service.impl; **import** com.alibaba.dubbo.common.utils.IOUtils; **import** com.alibaba.dubbo.common.utils.StringUtils; **import** com.alibaba.fastjs
Ajax传值以及接受传值,@ResPonseBody 和 @RequestBody
Ajax对于Java编程人员开说可是很重要的,可以说是必会的。 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <!--第一步:引入Jquery的地址(相当于下载js源代码,跟引入jar包一样)--> <scr
PHP接收前端传值各种情况整理
<h1>PHP接收前端传值各种情况整理</h1> <h2>服务端代码:</h2> header('Access-Control-Allow-Origin:*'); var_dump($_POST); exit; <h2>情况</h2> <h3>1) 传null</h3> $.pos
ShellScript值传递参数
Shell传递参数 ========= ######################################摘自菜鸟教程:[http://www.runoob.com/linux/linux-shell-passing-arguments.html](https://www.oschina.net/action/GoToLink?url=http%