`
Strive_sprint
  • 浏览: 22498 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

我说java中只有值传递你信么

 
阅读更多

 

      废话少说,看!

public class Test1 {
	public static void main(String [] agrs){
		int a = 10;
		int b = 20;
		change(a,b);
		System.out.println(a+"====="+b);
	}
	public static void change(int x,int y){
		x += 100;
		y += 200;
	}
}

      老师:知道结果么?

      新手:结果是110=====220。

      老师:你妹!

      老手:结果是10=====20。

      老师:不错,你来解释一下。

      老手:这里是值传递,传递参数是按值的拷贝进行传递,在调用方法change()的时候,是把a和b的值拷贝一份传给x和y这两个形参,然后x和y执行任何操作都与a和b无关

 

      再看!

public class Test2 {
	public static void main(String [] args){
		Person person = new Person();
		change(person );
		System.out.println(person .getName()+"=="+person .getAge());
	}
	public static void change(Person p){
		p.setName("李四");
		p.setAge(50);
	}
}
class Person{
	private String name = "张三";
	private int age = 30;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int i) {
		this.age = i;
	}
}

      这个结果不用说,大家都知道,这个是引用传递,传递参数是按引用传递的,传递的是内存地址。调用方法change()后,p和person指向同一内存地址,所以p对其做改变当然会影响到person

 

      不好意思本来有内存分配的图片想加进来,可是由于本人不知道怎么加桌面上的图片,然后又传进QQ空间,弄个图片地址,但是发现还是加不了。

 

      这里就得出了一个结论,当传递的是基本数据类型的时候,是按值拷贝进行传递,即值传递,当传递的是对象或这个数组(数组时引用类型)的时候,是按引用进行传递,即引用传递

 

      再看!

public class Test0 {
	public static void main(String [] args){
		String str = "前面";
		change(str);
		System.out.println(str);
	}
	public static void change(String s){
		s = "后面";
	}
}

      这个结果是什么呢?根据上面说的String是对象,那么应该是引用传递,所以结果是"后面"。对么?

      很显然,当执行change()前,str指向常量池中的"前面",当调用change()时,进行引用传递,所以s也指向"前面",但是在执行s="后面"以后,s就指向常量池中的"后面",这和str没有半毛钱关系,所以结果还是"前面"

      关于String对象的创建内存分配在我前面分析String类的博客中已经介绍了。

 

      看完这些你蛋疼了木有,是不是云里雾里了?反正我刚看这些的时候我已经找不到东南西北了。

 

      上面说了是对象和数组就是引用传递了,那么我为什么说只有值传递呢?首先基本数据类型就不用说了,看看对象的传递,说到底还是内存地址的传递,地址本来就是个数字,也就是基本类型,所以说java中只有值传递 。。嘿嘿,你信不信!

分享到:
评论

相关推荐

    深入了解为什么Java中只有值传递?

    Java 中只有按值传递的原因是因为 Java 程序设计语言的设计理念。在 Java 中,方法参数的传递方式是按值传递的,而不是按引用传递的。这意味着,当方法接收到参数时,实际上是接收到参数的副本,而不是原始参数本身...

    lotus domino java代理_获取传递值json

    今天,我们将讨论如何在 Lotus Domino Java 代理中获取传递值 JSON。 代理程序的作用 在 Lotus Domino 服务器上,代理程序可以用来处理用户请求,并返回相应的数据。代理程序可以用 Java 语言编写,具有很高的灵活...

    Java中的值传递和引用传递的区别.doc

    Java 中的值传递和引用传递的区别 Java 中的值传递和引用传递是两个不同的参数传递机制。值传递是指当基本数据类型作为入口参数传给函数体时,传入的参数在函数体内部变成了局部变量,这个局部变量是输入参数的一个...

    Java中的值传递和引用传递

    当一个变量为一个参数传入方法内部的时候,会有两种不同的传递方式:值传递和引用传递。  值传递的特点:不管方法内部对传进去的参数作任何改变,也不会影响方法外部的变量的值  引用传递的特点:方法内部对传...

    浅谈Java中真的只有值传递么

    Java中的参数传递方式一直以来都是一个讨论的热点,尤其是在学习编程初期,值传递和引用传递的概念可能会引起混淆。本文将深入探讨Java中参数传递的实质,以帮助理解和澄清这一问题。 首先,我们需要理解值传递和...

    详解java的值传递、地址传递、引用传递

    很多开发者对java的值传递和地址传递存在误解,认为java中的基本数据类型是值传递,而对象是地址传递或引用传递。事实上,java中的所有参数传递都是值传递的,而不是地址传递或引用传递。 值传递是指当方法调用时,...

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

    Java中参数传递的方式有两种理解:值传递和引用传递,但这两种说法实际上是对同一种机制的不同角度的描述。下面将详细解释这两种理解方式。 首先,我们来看值传递的理解。在Java中,当一个对象作为参数传递给方法时...

    java参数传递

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

    Java值传递的一些理解 1

    在Java中,这意味着无论是基本类型还是对象类型,传递给方法的都是参数值的副本。然而,在对象类型传递中,由于对象的引用是复制的,因此对引用的操作会影响到原始对象。这一点,对于理解Java中值传递的特性至关重要...

    java 之方法调用 方法传参 值传递还是引用传递字节码

    本文将深入探讨Java中的方法调用、值传递与引用传递,并通过字节码分析来进一步理解这些概念。 首先,我们来看方法调用。在Java中,方法是一组完成特定任务的代码块,可以通过方法名来调用执行。方法调用的基本语法...

    浅议JAVA语言中的参数传递.pdf

    一些书中认为,在 Java 中参数传递都是按值传递的,但是这种说法存在一定的模糊性。本文将对 Java 语言中的参数传递进行详尽的说明。 参数传递是指在方法调用时,传递参数的方式。在 Java 中,参数传递可以分为按值...

    java通过实例了解值传递和引用传递

    Java语言中有两种基本的参数传递方式:值传递和引用传递。值传递是指在方法调用时,传递的参数是按值的拷贝传递。引用传递是指在方法调用时,传递的参数是按引用进行传递,其实传递的引用的地址,也就是变量所对应的...

    java及C++中传值传递、引用传递和指针方式的理解.docx

    ##### Java中的值传递 Java语言只支持值传递。即使当我们将一个对象作为参数传递时,实际上传递的是该对象的引用的一个副本。这意味着如果我们在方法内部改变了这个引用所指向的对象的状态,则会影响到原始对象。但...

    Java参数传递的经典示例

    在Java中,参数传递主要有两种方式:值传递(Value Passing)和引用传递(Reference Passing)。虽然Java官方文档并未明确提及引用传递,但Java中的对象实际上是以引用的方式进行传递。 首先,我们来看基本类型(如...

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

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

    JSP中java代码与js之间的传值

    这篇博客将探讨如何在JSP中实现Java与JavaScript之间的值传递。 首先,让我们了解JSP的基本结构。JSP页面本质上是HTML代码与嵌入的Java代码相结合的。Java代码被编译成Servlet,然后在服务器端执行,生成HTML响应。...

    java及C++中传值传递、引用传递和指针方式的理解

    总结来说,Java只有值传递,这确保了方法不能直接修改对象,只能通过返回值或全局变量间接影响。C++则提供了值传递、引用传递和指针传递,让程序员可以根据需求选择最适合的方式来操作函数参数。值传递确保了函数的...

    JAVA反射参数传递概略

    在Java中,有两种基本的参数传递方式:值传递和引用传递。值传递是将变量的副本传递给方法,而引用传递则是传递变量指向的对象引用。对于基本类型,Java总是使用值传递;而对于对象,实际上是引用的复制,但仍然保持...

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

    Java参数传递及值传递实现原理详解 Java语言中,参数传递是方法调用过程中的一种机制,讲述了Java参数传递及值传递实现原理详解。参数传递有两种方式:按值传递和按引用传递。 1. 按值传递(Call by Value) 按值...

Global site tag (gtag.js) - Google Analytics