导航:首页 > 编程语言 > java只有值传递

java只有值传递

发布时间:2022-07-21 14:46:09

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

基本类型是值传递,
引用类型
可以看作是是
引用传递
.举个简单的例子吧
public
class
tt
{
public
static
void
change(int
a)
{
a=2;
}
public
static
void
change(int[]
A)
{
A[0]=2;
}
public
static
void
main(String[]
args)
{
int
b=1;
change(b);
System.out.println(b);//基本类型是
值传递
,所以b的值没有改变
int[]
B={1};
change(B);
System.out.println(B[0]);//数组版,对象等引用类型是引用传权递,所以B的值发生改变
}
}

❷ 为什么java方法中只有值传递,没有引用传递

您好:
Java中参数的传递方式有两种:传值和传引用。按值传递(call
by
value)表示方法接受的是调用者提供的值;按引用调用(call
by
reference)表示方法接受的是调用者提供的变量地址。
传值,参数为基本类型时,是采用传值的方式,示例如下:

传引用,一般参数为对象类型,示例如下:

希望对你有帮助!

❸ 6、如何来理解“java中没有指针传递,只有值传递”这句话。

对于基本数据类型,int long这些,传递的就是值本身,所以是值传递
对于对象引用类型,参数传递时传递的不是对象本身,也不是对象指针,而是对象在内存中位置的一个引用,这个应用本质上就是一个值,只不过底层会根据这个值找到对象。所以无论哪种数据类型,从java层面来看其本质都是值传递

❹ JAVA中的传递都是值传递吗有没有引用传递呢[转]

有没有引用传递呢? 在回答这两个问题前,让我们首先来看一段代码: Java代码 public class ParamTest { // 初始值为0 protected int num = 0; // 为方法参数重新赋值 public void change(int i) { i = 5; } // 为方法参数重新赋值 public void change(ParamTest t) { ParamTest tmp = new ParamTest(); tmp.num = 9; t = tmp; } // 改变方法参数的值 public void add(int i) { i += 10; } // 改变方法参数属性的值 public void add(ParamTest pt) { pt.num += 20; } public static void main(String[] args) { ParamTest t = new ParamTest(); System.out.println("参数--基本类型"); System.out.println("原有的值:" + t.num); // 为基本类型参数重新赋值 t.change(t.num); System.out.println("赋值之后:" + t.num); // 为引用型参数重新赋值 t.change(t); System.out.println("运算之后:" + t.num); System.out.println(); t = new ParamTest(); System.out.println("参数--引用类型"); System.out.println("原有的值:" + t.num); // 改变基本类型参数的值 t.add(t.num); System.out.println("赋引用后:" + t.num); // 改变引用类型参数所指向对象的属性值 t.add(t); System.out.println("改属性后:" + t.num); } } public class ParamTest { // 初始值为0 protected int num = 0; // 为方法参数重新赋值 public void change(int i) { i = 5; } // 为方法参数重新赋值 public void change(ParamTest T) { ParamTest tmp = new ParamTest(); tmp.num = 9; T = tmp; } // 改变方法参数的值 public void add(int i) { i += 10; } // 改变方法参数属性的值 public void add(ParamTest pt) { pt.num += 20; } public static void main(String[] args) { ParamTest t = new ParamTest(); System.out.println("参数--基本类型"); System.out.println("原有的值:" + t.num); // 为基本类型参数重新赋值 t.change(t.num); System.out.println("赋值之后:" + t.num); // 为引用型参数重新赋值 t.change(t); System.out.println("运算之后:" + t.num); System.out.println(); t = new ParamTest(); System.out.println("参数--引用类型"); System.out.println("原有的值:" + t.num); // 改变基本类型参数的值 t.add(t.num); System.out.println("赋引用后:" + t.num); // 改变引用类型参数所指向对象的属性值 t.add(t); System.out.println("改属性后:" + t.num); } } 这段代码的运行结果如下: 参数--基本类型 原有的值:0 赋值之后:0 运算之后:0 参数--引用类型 原有的值:0 赋引用后:0 改属性后:20 从上面这个直观的结果中我们很容易得出如下结论: 对于基本类型,在方法体内对方法参数进行重新赋值,并不会改变原有变量的值。 对于引用类型,在方法体内对方法参数进行重新赋予引用,并不会改变原有变量所持有的引用。 方法体内对参数进行运算,不影响原有变量的值。 方法体内对参数所指向对象的属性进行运算,将改变原有变量所指向对象的属性值。 上面总结出来的不过是我们所看到的表面现象。那么,为什么会出现这样的现象呢?这就要说到值传递和引用传递的概念了。这个问题向来是颇有争议的。 大家都知道,在JAVA中变量有以下两种: 基本类型变量,包括char、byte、short、int、long、float、double、boolean。 引用类型变量,包括类、接口、数组(基本类型数组和对象数组)。 当基本类型的变量被当作参数传递给方法时,JAVA虚拟机所做的工作是把这个值拷贝了一份,然后把拷贝后的值传递到了方法的内部。因此在上面的例子中,我们回头来看看这个方法: Java代码 // 为方法参数重新赋值 public void change(int i) { i = 5; } // 为方法参数重新赋值 public void change(int i) { i = 5; } 在这个方法被调用时,变量i和ParamTest型对象t的属性num具有相同的值,却是两个不同变量。变量i是由JAVA虚拟机创建的作用域在change(int i)方法内的局部变量,在这个方法执行完毕后,它的生命周期就结束了。在JAVA虚拟机中,它们是以类似如下的方式存储的: 很明显,在基本类型被作为参数传递给方式时,是值传递,在整个过程中根本没有牵扯到引用这个概念。这也是大家所公认的。对于布尔型变量当然也是如此,请看下面的例子: Java代码 public class BooleanTest { // 布尔型值 boolean bool = true; // 为布尔型参数重新赋值 public void change(boolean b) { b = false; } // 对布尔型参数进行运算 public void calculate(boolean b) { b = b && false; // 为了方便对比,将运算结果输出 System.out.println("b运算后的值:" + b); } public static void main(String[] args) { BooleanTest t = new BooleanTest(); System.out.println("参数--布尔型"); System.out.println("原有的值:" + t.bool); // 为布尔型参数重新赋值 t.change(t.bool); System.out.println("赋值之后:" + t.bool); // 改变布尔型参数的值 t.calculate(t.bool); System.out.println("运算之后:" + t.bool); } } public class BooleanTest { // 布尔型值 boolean bool = true; // 为布尔型参数重新赋值 public void change(boolean b) { b = false; } // 对布尔型参数进行运算 public void calculate(boolean b) { b = b && false; // 为了方便对比,将运算结果输出 System.out.println("b运算后的值:" + b); } public static void main(String[] args) { BooleanTest t = new BooleanTest(); System.out.println("参数--布尔型"); System.out.println("原有的值:" + t.bool); // 为布尔型参数重新赋值 t.change(t.bool); System.out.println("赋值之后:" + t.bool); // 改变布尔型参数的值 t.calculate(t.bool); System.out.println("运算之后:" + t.bool); } } 输出结果如下: 参数--布尔型 原有的值:true 赋值之后:true b运算后的值:false 运算之后:true 那么当引用型变量被当作参数传递给方法时JAVA虚拟机又是怎样处理的呢?同样,它会拷贝一份这个变量所持有的引用,然后把它传递给JAVA虚拟机为方法创建的局部变量,从而这两个变量指向了同一个对象。在篇首所举的示例中,ParamTest类型变量t和局部变量pt在JAVA虚拟机中是以如下的方式存储的: 有一种说法是当一个对象或引用类型变量被当作参数传递时,也是值传递,这个值就是对象的引用,因此JAVA中只有值传递,没有引用传递。还有一种说法是引用可以看作是对象的别名,当对象被当作参数传递给方法时,传递的是对象的引用,因此是引用传递。这两种观点各有支持者,但是前一种观点被绝大多数人所接受,其中有《Core Java》一书的作者,以及JAVA的创造者James Gosling,而《Thinking in Java》一书的作者Bruce Eckel则站在了中立的立场上。 我个人认为值传递中的值指的是基本类型的数值,即使对于布尔型,虽然它的表现形式为true和false,但是在栈中,它仍然是以数值形式保存的,即0表示false,其它数值表示true。而引用是我们用来操作对象的工具,它包含了对象在堆中保存地址的信息。即使在被作为参数传递给方法时,实际上传递的是它的拷贝,但那仍是引用。因此,用引用传递来区别与值传递,概念上更加清晰。 最后我们得出如下的结论: 基本类型和基本类型变量被当作参数传递给方法时,是值传递。在方法实体中,无法给原变量重新赋值,也无法改变它的值。 对象和引用型变量被当作参数传递给方法时,在方法实体中,无法给原变量重新赋值,但是可以改变它所指向对象的属性。至于到底它是值传递还是引用传递,这并不重要,重要的是我们要清楚当一个引用被作为参数传递给一个方法时,在这个方法体内会发生什么。

❺ Java String引用传递问题

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

❻ 怎么看到有人说java中只有值传递那引用传递呢,我拿对象做参数,这也是值传递

这个理论是说java的对象作为参数的时候传递过去的是地址的值,而不是对象本身,所以这也是值传递。

我感觉这个就是个文字游戏罢了,大家说的都是一样的东西,还非要争的你死我活。
所以我还是认为这就是引用传递。

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

java string值传递,可以参考如下解释:
Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。
java传递参数都是值,如果是对象的话,就是将引用的值复制一份给方法当参数。如果是根据引用把堆里的对象修改了,那么对象真被修改了,不过不是被创建赋值给的那个引用修改的,是方法里的一个复制的引用副本给修改的。

❽ java中参数传递方式

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

阅读全文

与java只有值传递相关的资料

热点内容
海龟编辑器积木编程怎么安装 浏览:183
程序员理发店生意怎么样 浏览:601
程序员罗技 浏览:180
软考初级程序员课程2021下载 浏览:487
杭州程序员奶奶 浏览:878
不听命令造成错误 浏览:979
kool系统源码 浏览:608
流氓app在哪里看 浏览:98
域名购买了怎么指向服务器 浏览:121
安卓手机如何让照片颜色反转 浏览:859
怎么下载卓睿安手机版 浏览:514
h3crange命令 浏览:468
php前景和python 浏览:338
php压缩图片内存大小 浏览:495
在哪里可以查看云服务器的信息 浏览:70
python读取非txt文件 浏览:799
艾莫迅用什么编程软件好 浏览:227
android文件存储读取 浏览:214
php基础教程第5版 浏览:543
服务器里面怎么刷东西 浏览:194