对象-java传递 ”值传递和引用传递“还是全部 “值传递”

问题描述

java传递 ”值传递和引用传递“还是全部 “值传递”

若说值传递。基本类型是copy的值赋给形参,对象是把 堆中对象的 地址 传给 形参。
若说分为值传递和引用传递。。引用传递 是因为这个传的地址,导致实参和形参 操作的都是同一块内存。

有点乱,像文字层次上的撕逼。。

若往引用传递方面思考,C++的指针又把我搅乱了。,java里不能直接管理内存,传递的不是 变量本身 的栈地址。而是变量的内容(值)

解决方案

java没有什么值传递引用传递,都是传递对象引用,你可以理解为统统是值传递。
不过如果是对象,这个值的含义是引用,你修改引用不会对实参有影响,但是你修改这个对象的成员,因为是同一个对象,所以会作用到原来的对象上。

C#才分为引用和值传递。C#的引用的引用允许你在函数中将对象指向另一个对象,并且反应到实参上。

解决方案二:

 举例
class A
{
    public int X
}
void foo(A a)
{
    a = new A();
        a.X=123; //这么写不会影响原来的 a
}
void foo1(A a)
{
        a.X=123; //这么写会影响原来的 a的X
}

解决方案三:

其实都是值传递,只是对象的引用相当于指针,只要指针的值一样,那么都指向那个对象,所以这个指针是不是副本没关系。
一般可以这样理解基本数据类型传的是值,对象传的是引用。

解决方案四:

java永远只有值传递

解决方案五:

Java只有值传递,没有引用传递

解决方案六:

关于值传递和引用传递,我更喜欢说传递的都是拷贝。
如果拷贝的这份东西就是一个值,那就是值,如果拷贝的东西指向的是一个对象,那就是引用传递。
具体这个引用的值会不会影响之前的值,那还要看这个对象是否是可变对象,如果遇到类似于String 这样的不可变对象,传递的即便是new出来的对象,但进去的值......
答案就在这里:java的引用传递和值传递

解决方案七:

参考。

http://www.cnblogs.com/clara/archive/2011/09/17/2179493.html

解决方案八:

1、Java中分值传递和引用传递
2、Java中数据类型为值类型的传递为值传递(例如:int、double等)
3、Java中数据类型为引用类型的传递为引用传递(例如:String、数组等)

时间: 2024-10-29 18:44:38

对象-java传递 ”值传递和引用传递“还是全部 “值传递”的相关文章

字符串-java中String究竟是传递的值,还是引用

问题描述 java中String究竟是传递的值,还是引用 很多人说,java中的String虽然是对象,但是具有值类型的特征.他是值传递,传递的值. 我认为这这种说法完全是错误的. String和普通对象毫无区别,和其他对象一样,传递的是引用,而不是值. 一段String的运用代码: String a = "123"; public void change(String a){ a = "234"; } 很多人会说,a的值没有变,是因为String是值传递,问题是,

java只有值传递,不存在引用传递

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递?  我毫无疑问的回答:"引用传递!",并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递!   回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人!   综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出!   先来看一个

Java多线程初学者指南(7):向线程传递数据的三种方法

在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果.但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别.由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据.本文就以上原因介绍了几种用于向线程传递数据的方法,在下一篇文章中将介绍从线程中返回数据的方法. 欲先取之,必先予之.一般在使用线程时都需要有一些初始化数据,然后线程利用这些数据进行加工处理,并

详解Java中的指针、引用及对象的clone

对象|详解 Java语言的一个优点就是取消了指针的概念,但也导致了许多程序员在编程中常常忽略了对象与引用的区别,本文会试图澄清这一概念.并且由于Java不能通过简单的赋值来解决对象复制的问题,在开发过程中,也常常要要应用clone()方法来复制对象.本文会让你了解什么是影子clone与深度clone,认识它们的区别.优点及缺点.看到这个标题,是不是有点困惑:Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的

java基本类型的包装集作为参数传递的是值而不是引用

问题描述 java基本类型的包装集作为参数传递的是值而不是引用 java基本类型的包装集作为参数传递的是值而不是引用,可以解释下,为什么是这样的吗?结果我已经知道了 解决方案 说到值传递,无非就是和引用传递以及地址传递相对来说的. 引用传递,行参记录的是实参的地址.值传递,行参是实参的copy. 对于java来说,行参存的就是实参内部的值(虽然这个值是对象的地址,但不是实参的地址) 解决方案二: 这个integer对象有其特殊性,在该类中是final类型.所以并不能改变 解决方案三: 因为基本类

java中对象的操作,将一个包含引用对象的对象转换成jsonStr格式的时候

问题描述 java中对象的操作,将一个包含引用对象的对象转换成jsonStr格式的时候 将一个包含引用对象的对象转换成jsonStr格式的时候以:引用对象名.引用对象属性:值,显示 例如:User user = new User(1,"tom"); {"user.id":"1","user.name":"tom"} 这种json字符串格式 解决方案 http://blog.csdn.net/snowdrea

java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗

问题描述 java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗 java中一个void修饰的方法无返回值,那么有是不是返回一个空对象,有空对象这种说法吗 解决方案 加入你有一个对象 Object 里面有个方法:public void method1(); 那你调用这个方法的时候就是 object.method1(); 那么这里就表示 没有返回值. 所以我里面的void就是 :没有返回值,这个方法不能做他用! 对比 有一个object 里面有一个方法: publ

c++函数参数类型-引用、指针、值

在编写个人函数的时候,你将会受到C++中的一条基本的原则的限制:在默认的情况下,变量只能以值传递的方式传递给函数.这句话的意思是:被传递到函数的只是变量的值,永远不是变量的本身. 例如: [cpp] view plaincopyprint? void changeVar(int myVar,int newValue)      {        myVar=newValue;      }      int main(){      int myNum=20;      changeVar(my

java数据类型-java中只要是基本数据类型的变量初始值问题

问题描述 java中只要是基本数据类型的变量初始值问题 java中只要是基本数据类型的变量 int a;和int a =0是一样的 只要是引用数据类型变量 String a = null; String a; 是一样的 以上说法正确吗 解决方案 基本数据类型对.引用的值不初始化是没有默认值的,引用的数据类型变量不初始化是不能用的.必须初始化了别的地方才能用.因为没有引用的内存地址. 解决方案二: 你分别打印String a = null; String a; 看看. 解决方案三: java中基本