`
本来不想注册
  • 浏览: 197403 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

引用作为参数传值的一些疑惑解释

阅读更多
先看代码:
public class ReferencePass {
	public static void change(String str){
		str = "xxd7";
	}
	
	public static void main(String[] args){
		String str = "xxd";
		change(str);
		System.out.println(str);
	}
}


结果是xxd,并没有chang成,这是为什么?
实际上:
1)String str = "xxd";  -->在main()方法中, str是指向字符串常量池中“xxd”的一个引用。
2)change(str); --> 将str作为argument传递到change()方法里,此时将“诞生”另外一个str,暂且将其命名为argStr,argStr是在将对象引用作为参数传递时,产生的一个“副本”,它和原来的引用(str)都是指向同一个内存地址(对象),即argStr同样也是指向字符串常量池“xxd”的一个引用。
3)在change()方法中,str = "xxd7"; --> 这里实际上是argStr被修改,argStr被修改成指向字符串常量池“xxd7”的一个引用。
4)在main()方法中,System.out.println(str); --> 打印输出的是str,是原来的引用,它的指向并没有改变过。argStr的有效性只存在于change() 方法中,在main()方法中,argStr是无效的。

如果搞懂了以上这些,那么下面这段代码,大家肯定知道结果是什么了.
public class ReferencePass2 {
	public static void change(Dog dog){
		Dog dog1 = new Dog();
		dog1.name = "WangCai";
		dog.name = "Xiaoqiang";
		dog = dog1;		
	}
	
	public static void main(String[] args){
		Dog dog = new Dog();
		change(dog);
		System.out.println(dog.name);
	}
}

class Dog{
	String name;
}


参考链接:
http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

分享到:
评论

相关推荐

    引用类型传值方法

    值类型如整型、浮点型、布尔型等,它们在赋值或作为参数传递时会进行副本复制,而引用类型则有所不同。本篇文章将详细探讨引用类型的传值方式。 首先,理解引用类型的概念至关重要。引用类型包括类(classes)、...

    标签样式 设计参数传值标签助手

    在IT行业中,标签样式设计和参数传值是一个关键的领域,尤其在自动化和批量处理数据时。"标签助手"是一个工具或库,旨在简化和优化这个过程。它允许用户通过动态复制和赋值来创建、修改和管理各种标签,如二维码、一...

    赋值传值,引用传值,指针传值的区别

    构造函数,借助构造函数 解释 【赋值传值】,【引用传值】,【指针传值】

    浅谈Java中方法的参数传值.pdf

    为了更清楚地解释这一点,文章通过一个Test类的例子来说明引用类型参数传值的过程。在这个例子中,有四个参数:par1是基本数据类型,而par2、par3是引用类型,par4是数组类型。当main()方法调用change()方法时,传递...

    引用参数和传值参数的区别深入解析

    引用作为参数的好处是减少了临时变量对内存的开销,因此常用于对大对象的操作; 而常引用做参数就是保护参数不被修改; 附:堆和栈的知识一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)

    ios-block 多参数传值.zip

    在iOS开发中,Block是一种强大的特性,它允许我们在代码中定义小型、自包含的代码块,可以作为参数传递,也可以返回。"ios-block 多参数传值.zip"这个压缩包显然是一个关于如何使用Block来传递多个参数的示例项目。...

    Java中参数传值的代码清单.pdf

    这意味着当一个基本类型变量作为参数传递给方法时,方法内部会创建该变量的一个副本。对这个副本进行的任何修改都不会影响原始变量的值。例如,在`TestBasicTypeParameters.java`中,`add`方法接收两个整型参数`x`和...

    iOS 无参数传值

    标题提到的"iOS无参数传值",实际上是在讨论如何在不传递显式参数的情况下进行数据通信。这通常涉及到全局变量、单例模式、通知中心、Key-Value Observing (KVO)等方法。在这个场景下,我们特别提到了使用`...

    23.Java对象作为参数传递是传值还是传引用1

    总结起来,Java中对象作为参数传递时,传递的是对象引用的副本,而不是对象本身。这意味着函数可以修改对象的状态,因为它持有相同的引用,但不能改变对象引用指向另一个不同的对象。这种行为与基本数据类型不同,...

    各种定向携带参数传值

    ### 各种定向携带参数传值 在动态页面开发中,参数传递是非常常见的需求之一,尤其是在需要跳转页面并保留某些关键数据时。本文将详细探讨几种常用的参数传递方法及其应用场景,帮助开发者更好地理解如何在不同场景...

    java中传值还是传引用的的认识

    当作为参数传递给一个方法时,处理这两种类型的方式是相同的。两种类型都是按值传递的;没有一种按引用传递。 按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该...

    Java是传值还是传址引用

    这句话的意思是,当你将一个对象作为参数传递给方法时,你实际上传递的是指向该对象的引用的副本。这意味着如果在方法内部修改了对象的状态,会影响到原始对象,但如果你重新赋值这个引用,原始对象不会受到影响。 ...

    java的传值与传值后的改变

    在Java编程语言中,"传值与传值后的改变"是一个关键的概念,涉及到函数调用时参数的传递方式。在Java中,有两种基本的数据类型:原始类型(如int, double, char等)和引用类型(如类实例、数组)。它们在函数调用时...

    关于C语言中参数的传值问题

    2. **地址传递**:在考题二中,`Exchg2`函数接受指向整型变量的指针作为参数,通过指针可以间接修改实际参数的值。函数内部通过`*px`和`*py`来访问和修改`a`和`b`的值。因此,当调用`Exchg2(&a, &b)`时,`a`和`b`的...

    C++传值调用与引用调用区别实例代码

    当一个函数被调用时,可以通过不同的方式传递参数,其中最常见的是传值(call by value)和传引用(call by reference)两种方法。这两种方式在内存管理、性能影响以及数据修改能力上有着显著的不同。 #### 1. 传值调用...

    labview主VI和子VI的传值、全局变量传值、引用传值

    引用传值通过“创建引用”函数实现,子VI则使用“引用事件结构”来处理引用传来的消息。这种方式虽然强大,但也需要更高的编程技巧和理解,因为不当使用可能会导致内存泄漏或死锁等问题。 在实际应用中,通常会根据...

    Java传值还是引用

    这意味着无论是基本类型还是引用类型,当作为参数传递时,都会有一个副本被创建并传递到方法内部。然而,对于基本类型,传递的是实际值的副本,而对于引用类型,传递的是对象引用的副本。 在给定的代码示例中,我们...

    java中传值与传引用

    当一个对象实例作为参数传递时,函数接收到的是该对象引用的副本,而不是对象本身。这意味着,尽管函数不能改变引用指向的对象,但可以修改对象的属性。例如,`changeModel(Model model)`函数中,`model`是`main`...

Global site tag (gtag.js) - Google Analytics