`
Javaloverlover
  • 浏览: 347016 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java的参数都是值传递的

    博客分类:
  • java
阅读更多
java中没有引用传递的概念。
基本类型肯定是值传递了,所以在方法中的修改不会对值产生任何影响。
如:
public class SwapNum {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int a = 1;
		int b = 3;
		System.out.println("a:" + a + "b:" + b);
		swap(a, b);
		System.out.println("a:" + a + "b:" + b);
	}

	public static void swap(int a, int b) {
		int temp = a;
		a = b;
		b = temp;
	}

}

结果:
a:1b:3
a:1b:3

但有人会说,传递对象引用时,会改变对象的内容,属于值传递,这个是不对的。
其实当作为参数传递时,系统会复制一份实参,赋值给形参,然后方法里的操作不会对实参产生影响,但因为形参和实参都指向同一个对象,所以形参的操作是对对象的操作,对象改变后,实参指向的对象就是这个改变后的对象,这样,就感觉方法的操作对实参产生了影响。
如下代码:
public class TestMethod {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Person p = new Person();
		p.setAge(10);
		p.setName("randy");
		setNull(p);
		System.out.println(p.getName() + ":" + p.getAge());
	}

	public static void setNull(Person p) {
		p.setAge(21);
		p = null;
	}
}

结果:
randy:21

当你在方法里对形参设置了age后,再将形参设为null,实参指向的对象的age改变了,但实参不为null。这个就是最好的证明,方法的传递都是以值来传递的。
分享到:
评论
3 楼 LinApex 2013-08-12  
xouou_53320 写道
java中没有引用传递的概念。这句话是哪本书上说的?

传递的是引用的一份拷贝,
实参是原引用
形参是引用拷贝
这个拷贝就是new Person()出来的对象的地址值.
引用拷贝=null是不影响原引用的,因为它们之间没啥关联


是的,传递的是 Person 对象的引用地址。
在setNull方法中 将 Person 对象设置为 null ,只是将这个引用给为空了,不影响其真实的内存地址.

{
Person person = new Person();
person.name = "fuak";
person.age = 1;

System.out.println("第一次:" + person);

setNull(person);

System.out.println("内存地址:" + person);
}

private static void setNull(Person person)
{
person.name = "test";
System.out.println(person);
person = null;
System.out.println("setNull 内存地址:" + person);

}
2 楼 xouou_53320 2012-02-01  
java中没有引用传递的概念。这句话是哪本书上说的?

传递的是引用的一份拷贝,
实参是原引用
形参是引用拷贝
这个拷贝就是new Person()出来的对象的地址值.
引用拷贝=null是不影响原引用的,因为它们之间没啥关联
1 楼 mm8 2011-09-28  
又深刻了-步,永远是值传递

相关推荐

    Java:按值传递还是按引用传递详细解说

    按值传递是指在函数或方法调用过程中,传递给函数或方法的参数是原始值的副本,而非原始值本身。这意味着任何对传递进来的参数所做的修改都不会影响到原始值。这种传递方式的特点如下: 1. **参数是原始值的副本**...

    java 值传递和引用传递的比较

    在Java编程语言中,了解值传递和引用传递的概念至关重要,因为它们直接影响到函数参数的处理方式。下面将详细探讨这两个概念及其区别。 首先,我们来理解什么是值传递。在Java中,基本数据类型(如int、double、...

    java值传递与引用传递

    首先,值传递是指函数调用时,实际参数的值被复制一份传给形式参数。这意味着,当函数内部对形参进行操作时,不会影响到实际参数。在Java中,基本数据类型(如int、char、float等)就是按值传递的。例如,如果你有一...

    Java语言中参数值传递和引用传递比较.pdf

    参数值传递是指将实际参数的值复制给形式参数,形式参数的变化不影响实际参数的值。引用传递是指将实际参数的引用(地址)传递给形式参数,对形参对象内容的改变将影响实际参数对象的内容。 在 Java 语言中,基本...

    java参数传递

    这里详细的说明了,java参数传递的过程,引用传递,值传递

    12.参数传递之值传递.zip

    12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值传递.zip12.参数传递之值...

    Java参数传递PPT

    Java参数传递的规则是:**Java只使用值传递,但这种值传递对于对象参数表现为类似引用传递的行为。** 在值传递中,函数或方法接收的是原始数据类型(如int、double、boolean)参数的副本。例如,如果有一个方法...

    Java是值传递,传对象引用也是通过值

    标题“Java是值传递,传对象引用也是通过值”揭示了Java中参数传递的核心概念。Java总是以值传递方式进行,这意味着当你将一个变量作为参数传递给方法时,传递的是该变量所存储值的一个副本。然而,对于对象类型的...

    java参数传递时到底是值传递还是引用传递分享.pdf

    Java参数传递机制是一个常见的面试问题,它涉及到Java语言的基础特性。Java中参数传递的方式有两种理解:值传递和引用传递,但这两种说法实际上是对同一种机制的不同角度的描述。下面将详细解释这两种理解方式。 ...

    Java面向对象值传递和引用传递

    值传递和引用传递的区别可以用一个简单的例子来解释:值传递是一样的设计图纸,你可以根据这个设计图纸盖一个新的房子,然后你可以随便修改这个房子,而不影响原来的房子。引用传递是把家门牌号告诉你,然后你来我家...

    java参数传递时到底是值传递还是引用传递[归类].pdf

    Java的参数传递方式实际上是一种特殊的"值传递",通常被称为"按引用传递对象的引用",这与C++等语言中的引用传递有所不同。以下是对这个主题的详细解释。 在Java中,所有的参数传递都是基于值的,但这涉及到一个...

    Java参数传递的经典示例

    Java参数传递机制是编程中非常重要的概念,它涉及到基本类型和引用类型的差异。在Java中,参数传递主要有两种方式:值传递(Value Passing)和引用传递(Reference Passing)。虽然Java官方文档并未明确提及引用传递...

    java方法的参数传递其二.docx

    Java 方法参数传递是 Java 编程语言中的一种基本机制,在方法调用时将参数传递给方法体内的变量,但是在传递过程中,参数的类型会对传递结果产生影响。在本文中,我们将讨论 Java 方法参数传递中的引用类型传递。 ...

    java参数的传递与返回值

    ### Java参数的传递与返回值 #### 一、Java参数传递的基本概念 在Java中,方法(或称为函数)可以通过参数来接收外部的数据,并且能够返回处理后的结果。参数的传递方式主要有两种:值传递(Pass-by-value)和引用...

    Java参数传递及值传递实现原理详解

    按值传递是指将实参的值复制给形参,形参的变化不会影响实参的值。这种方式适用于基本数据类型,如int、long、float等。在按值传递中,实参的值被复制到形参中,形参的变化不会影响实参的值。 例如: ```java ...

    java 参数传递

    Java 中的参数传递机制,可以简单地总结为:基本类型作为参数传递时,是传递值的拷贝;对象作为参数传递时,是传递对象的引用。如果你在方法内改变了对象的值,那么原对象也跟着改变,但是如果你重新分配了对象的...

    java参数传递 java 参数.doc

    Java 参数传递机制是编程中的重要概念,尤其是在Java中,它涉及到“值传递”和“引用传递”的理解。这里我们将深入探讨这两个概念,并结合给定的示例代码进行解析。 首先,我们看“值传递”。在Java中,基本类型...

    JAVA反射参数传递概略

    值传递是将变量的副本传递给方法,而引用传递则是传递变量指向的对象引用。对于基本类型,Java总是使用值传递;而对于对象,实际上是引用的复制,但仍然保持着对象的值不变。 在反射中,`java.lang.reflect.Method`...

Global site tag (gtag.js) - Google Analytics