`
v5qqbrowser
  • 浏览: 358135 次
文章分类
社区版块
存档分类
最新评论

关于java 参数 值传递的感悟

 
阅读更多

虽然现在使用java的时候进行参数传递,已经很不经意了。但最近的学习中,突然想起了参数传递的问题。是值还是引用,以前学习的记忆中是值传递,不过还是实例验证一下最好:


package com.ethan.test;

public class People {
	private Integer i = 1;

	public Integer getI() {
		return i;
	}

	public void setI(Integer i) {
		this.i = i;
	}
}

package com.ethan.test;

import org.junit.Test;

public class ValuePass {
	//按值传递,数据拷贝,不影响
//	private String s = "1";
	private String s = new String("1");
	public void change(String s) {
		s = "2";
		System.err.println(s);
	}
	
	public void change2(People p) {
		p.setI(1);
		System.err.println(p.getI());
	}
	
	/*
	 * 输出:2 1
	 * 说明是值传递,数据的拷贝,原来的数据不受影响
	 */
	@Test
	public void test1() {
		change(s);
		System.err.println(s);
	}
	/*
	 * 输出:1 1
	 * 说明是 传递的是引用所指向的对象实例 的内存地址
	 * p 只是相当于一个引用指针,指向了内存中的实例空间。
	 * 如果p=null,则意味 这个指向断开了,但对象实例不一定回收销毁,如果
	 * 此时还有一个People类型 变量p2 指向它
	 */
	@Test
	public void test2() {
		People p = new People();
		p.setI(2);
		change2(p);
		System.err.println(p.getI());
	}
}

虽然这个问题很小,但对于java中的引用“指针”,对象的回收有了更好的理解。

最后提一下 代码的安全性拷贝:比如一个方法接收的参数是一个对象类型,那么就存在风险了。因为传入的对象,可以通过其他的引用,轻易就能改变它。

所谓安全性拷贝 分为 浅拷贝和深拷贝。现在只说一下浅拷贝:在方法块里边,再new一个相同类型的对象实例,设置参数对象的值,这样一来就实现了数据拷贝,操作的将是一个新的对象。


分享到:
评论

相关推荐

    java中只有值传递

    Java中传递对象时传递的并不是对象中的内容, 而是对象的地址。

    java参数传递

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

    13.java参数传递之引用传递.zip

    13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....

    11.java参数传递.zip

    11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java...

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

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

    58.java参数传递机制.zip

    58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递...

    Java参数传递PPT

    关于Java参数传递的PPT,详细介绍参数传递的类型。彻底理解Java只有唯一传递方式——值传递。

    java参数的传递与返回值

    java参数的传递与返回值 江苏省无锡市

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

    这个在Java里面是经常被提起的问题,也有一些争论,似乎最后还有一个所谓的结论:“在Java里面参数传递都是按值传递”。事实上,这很容易让人迷惑,下面先分别看看什么是按值传递,什么是按引用传递,只要能正确理解...

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

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

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

    java 值传递和引用传递的比较区别,包括代码及详解

    java html 值传递

    java 通过html值传递,绘制圆圈,适合初学者

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

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

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

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

    为什么Java只有值传递

    我们先看一下值传递和引用传递的概念和区别 值传递:是指在调用函数时将实际参数复制一份传递到函数中,...我们通过例子理解一下Java的值传递: public static void main(String[] args) { int a = 10; int b = 20;

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

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

    java参数传递 java 参数.doc

    java参数传递 java 参数

    java值传递与引用传递

    不管是按值传递还是按引用传递,都是把栈中的数据备份了一份给参数变量,只不过值类型备份的是具体的数值,而引用类型备份的是内存地址

    java参数传递学习demo

    java的参数传递对比,体现了值传递和引用传递的区别,是我在java入门是写的学习demo

    62.java引用类型的参数传递.zip

    62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递....

Global site tag (gtag.js) - Google Analytics