首页编程java编程java值传递是什么意思(java中的值传递和引用传递到底有什么区别)

java值传递是什么意思(java中的值传递和引用传递到底有什么区别)

编程之家2023-10-13101次浏览

大家好,今天来为大家解答java值传递是什么意思这个问题的一些问题点,包括java中的值传递和引用传递到底有什么区别也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

java值传递是什么意思(java中的值传递和引用传递到底有什么区别)

java引用传递和值传递

结果是(p1[0,0], p2[5,5])就对了,下图是执行流程以及内存变化

记住:当对象的引用被执行赋值操作(=)后,讲不在指向原来的对象(新的对象不是原来的对象)

//modify方法做如下修改就知道为什么是那样的结果了:

java值传递是什么意思(java中的值传递和引用传递到底有什么区别)

privatestaticvoidmodify(Pointp1,Pointp2){

System.out.println(p2);//注意观察hashcode值,不要重写toString()方法

Pointp=p1;

java值传递是什么意思(java中的值传递和引用传递到底有什么区别)

p1=p2;

p2=p;

p1.setLocation(5,5);

p2=newPoint(5,5);

System.out.println(p2);//这里p2与之前的p2的hashcode值已经不是同一份

}

//修改main方法如下

publicstaticvoidmain(String[]args)

{

Pointp1=newPoint(0,0);

Pointp2=newPoint(0,0);

System.out.println(p2);

modify(p1,p2);

System.out.println(p2);//modify执行完成后,p2的指向并未改变

System.out.println(p1.getX()+","+p1.getY()+","+p2.getX()+","+p2.getY());

}

/**

*可以使用断点调试观察modify方法中p2的指向变化

*Eclipse中引用被赋予新的值时,调试界面中[变量列表]的变化为黄色高亮显示

*/

希望对你有帮助!

java string是值传递还是引用传递

你是C/C++或是VB转过来的吗?在Java中过多考虑引用(指针)和值之间的关系是步入歧途,这正是Java的设计者极力避免你考虑的问题。

你需要明白的是:

1、Java中所有方法的参数的传递都是“值传递”;

2、Java中所有对象类型的变量的“值”,本质上说,包含了Java堆中的实际对象的地址,你可以大体认为Java的变量对应了C/C++中的指针(其实这里面有更复杂的机制)。事实上,Java并不像C/C++一样明确的区分“值语义”与“引用语义”,Java栈中也不会存放任何对象的实体(这点与C/C++不同,C/C++栈中可以存放对象实体),所有的Java对象都是在堆中。

概念上的区别在于,我这里提到的“变量”是指Java栈中的内容,对应你说的“引用”;我提到的“对象”是指Java堆中的实体,对应你说的“值”。而一般Java教材中提到的“值传递”,是指这些“变量”的内容的传递,不是Java堆中的对象实体的传递。

你用字符串来做实验,并推广为所有Java对象的做法,并不是特别合适。Java的String类型有特殊的处理:所有编译期认识的字符串,都会被放到常量池,于是下面的语句:

a="s";

b="s";

a和b并不像其它对象一样有创建的动作,都是直接指向常量池中的"s",所以你可以得到a==b。而下面的语句:

a= new String("s");

b= new String("s");

是分别在Java堆中创建了2个对象,此时a!=b。

本质上说,对于基本数据类型(整数、字符等),Java的符号==,用于判断二者的值是否相等;对于对象类型,Java的符号==,用于判断两个变量是否是“同一个对象”,equals()方法才是用于判断两个对象是否相等。

你希望实现的swap逻辑,在Java中通常认为是无法实现的。拿你这个例子来说,swapValue()中的tmpValue无论怎么更改,只是改变tmpValue自己的内容(即不断指向不同的对象),并不会改变value中的内容(始终指向同一个对象)。这也是为什么Java最初说自己永远是值传递。你只有改变tmpValue指向的对象的值(通过调用这个对象的方法或是更改它的属性),使用value访问时,才能看到这些改变。

为了弥补这个缺陷,C#才加入了ref关键字,允许传入变量的引用(如果参考C/C++,C#传递的实际是二级指针,它的内容是栈中的变量的地址)。

java值传递和引用传递的区别

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

java中的值传递和引用传递到底有什么区别

java中在参数传递时有2种方式,两者的区别:

1、按值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。简单来说就是直接复制了一份数据过去,因为是直接复制,所以这种方式在传递时如果数据量非常大的话,运行效率自然就变低了,所以java在传递数据量很小的数据是值传递,比如java中的各种基本类型:int,float,double,boolean等类型的,具体可以自己测试。

结果:

2、按引用传递:引用传递其实就弥补了上面说的不足,如果每次传参数的时候都复制一份的话,如果这个参数占用的内存空间太大的话,运行效率会很底下,所以引用传递就是直接把内存地址传过去,也就是说引用传递时,操作的其实都是源数据,这样的话修改有时候会冲突,记得用逻辑弥补下就好了,具体的数据类型就比较多了,比如Object,二维数组,List,Map等除了基本类型的参数都是引用传递。代码:

有些文章中写的是java中所有的传参方式都是按值传递,这也说得通,无非就是文字游戏,因为无论是按值传递还是按引用传递都是把值传递过去了,所以就叫按值传递。

好了,关于java值传递是什么意思和java中的值传递和引用传递到底有什么区别的问题到这里结束啦,希望可以解决您的问题哈!

java label是什么 java中jlabel什么意思java中的颜色可以做什么(java颜色代码怎么用)