导航:首页 > 编程语言 > java如何引用传递

java如何引用传递

发布时间:2023-06-08 16:08:45

java中的引用传递是什么

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

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


㈡ java 引用传递

因为字符串常来量与一般对象不同,源JVM(Java虚拟机)将字符串常量创建在一个Pool里面,所以"111"和“2222222”都在这个Pool里。main里面的str指向"111",而myTest里面的局部变量先指向"111",后指向"22222222",当myTest调用结束,该变量消亡,但main里面的str并未改变,仍然指向"111"。

如果是一般对象,不同在于一般对象存在于heap memory中,当调用myTest时,myTest中的局部变量也指向该对象,如果在myTest中修改对象中的某个instance variable的值,返回后,因为main里面的str指向heap中同一对象,自然该值也改变了。

㈢ Java中怎么引用传递

//Java中怎么引用传来递,在main中的代源码
public static void main(String[] args) {
Ldc l = new Ldc("你好");//这里的值可以改
System.out.println(l.str);
}
//----------------------------------------------------------------------------------------------------
//新建一个Ldc类代码如果

public class Ldc {
public String str ="";
Ldc(String str){
this.str="我在这里返回你传递来的参数:"+str;
}
}

㈣ java类方法如何实现引用传递和值传递

参数是基本类型就是传值,传对象就是引用传递。

swap(Integer x, Integer y)可以传递引用,但是没办法实现交换。这跟Integer的实现方式有关。所以不是引用传递就一定能改变外面的值。

下面是引用传递,交换的情况,又臭又长。

classUntitled{

intneedFix;


publicstaticvoidswap(Untitledx,Untitledy){
inttemp=x.needFix;
x.needFix=y.needFix;
y.needFix=temp;

}
publicstaticvoidmain(String[]args){
Untitle1=newUntitled();
Untitle2=newUntitled();
u1.needFix=3;
u2.needFix=4;
swap(u1,u2);
System.out.println(u1.needFix+","+u2.needFix);
}
}

另外,你可以考虑一下引用传递,不过也是一种传值,java里面没有事实上的指针。直接交换引用指向的对象是没有作用的。

Untitledtemp=x;
x=y;
y=temp;

无效。

㈤ 在JAVA中怎么可以使变量进行引用传递啊

首先,这个类里面的方法没用:
class Cheshi2
{
Cheshi2(Integer res)
{
res= new Integer(40);
}
}
我知道你以为引用可以这样做,但事实是:
执行Cheshi2 c2=new Cheshi2(c1.num);调用
Cheshi2(Integer res)
{
res= new Integer(40);
}
Integer res是新建的一个对象(这是函数调用的规则之一),只是它的值是c1.num,它和c1.num是两个不同的东西!你改变res:res= new Integer(40);让res指向一个不同的对象,但是c1.num没变啊,它还指向原来的num = new Integer(20);.

㈥ Java String引用传递问题

了解数据在堆栈内存中的存储,这道问题就可以解了。
1.String对象传入方法后,str2是局部变量,方法结束之后,局部变量值会在缓冲区中。但是并没有修改成员变量str1的值,而输出的仍然是str1的值,"hello"。(局部变量和成员变量是不同的变量,即使名字相同)
2.至于第二个因为类的实例化,对象可以指向该类地址,可以访问该类的成员变量。对象指向成员变量temp,调用方法tell方法时,传入的是Ref2对象的地址。该地址可以找到Ref2的成员变量temp。然后把"xueyuan"赋给temp,由此temp的值已经改变,方法调用结束之后,输出的是Ref2类的已经改变值的成员变量

㈦ 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中如何实现C++语法里的按引用传递参数

Java里面不像C++/C那样,Java只有对象类型参数才是传地址的,Java的基础类型变量做参数的时候,都只是传值。

解决方法是,用Java的类做函数的参数类型。

如下是我写的一个例子说明:
文件名:byRefVariable.java
//--------------------------------------
public class byRefVariable
{
public static void main(String args[])
{
obj test=new obj();
System.out.println("没有把test作实参传递给changeIt方法之前的test.var的值="+test.var);
changeIt(test);//坐实参传递到一个函数!
System.out.println("test作实参传递给changeIt之后"+test.var);
}
public static void changeIt(obj a)
{
a.var=12580;
}
}
class obj //我在这里定义了一个类。
{
int var=0;
}

阅读全文

与java如何引用传递相关的资料

热点内容
文件查看设置信息失败 浏览:668
编程如何编出乌鸦喝水的课文 浏览:20
国家反诈app报案助手怎么使用 浏览:439
秘密文件丢失多少天 浏览:237
js中csstext 浏览:382
目标文件名过长复制 浏览:892
乐动力计步器老版本 浏览:933
压缩文件链接怎么编辑 浏览:808
如何锁定PDF文件里的图章 浏览:89
数据库超时是什么 浏览:649
文件怎么改整列内容 浏览:764
360压缩文件发邮件空白 浏览:813
上哪里查自己大数据 浏览:907
编程语言怎么学车 浏览:189
编程该怎么学才能先找工作 浏览:524
文件刻制光盘多少钱 浏览:861
校园网的网络组成结构 浏览:862
u盘系统复制文件过大 浏览:843
局域网复制文件 浏览:574
2007cad怎么编程 浏览:325

友情链接