网上有个很经典的java32问,其中有一题问java参数传递方式是按值还是按引用,一般答案都说是按值。对此我有一些疑惑,查了相关资料,终于基本弄清楚了。下面是一个测试:
public class People
{
private int age;
private String name;
public People(String name, int age)
{
this.age = age;
this.name = name;
}
public void show()
{
System.out.println(getName()+":"+getAge());
}
public int getAge()
{
return age;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
}
public class Main
{
public static void main(String[] args)
{
int i =9;
String s = "ppp";
People aaa = new People("aaa",40);
modifyInt(i);
modifyString(s);
modifyObject(aaa);
System.out.println(i);
System.out.println(s);
aaa.show();
}
private static void modifyInt(int i)
{
i = 40;
}
private static void modifyString(String str)
{
str = "sss";
}
private static void modifyObject(People aaa)
{
aaa.setAge(11);
aaa.setName("ooo");
}
}
输出结果:
9
ppp
ooo:11
由此可见,基本类型和String类型并没有发生变化,它们是按值传递的;而一般对象发生了变化,可以说是按引用传递的。但为什么有人说对象也是按值传递的呢?理解的角度不同,他们所理解的值并不是指整个对象的具体内容,而是对象的引用(引用是什么东西呢?说白了,就是对象存储的地址,这个地址以值拷贝的方式传到了形参中,“值传递”指的就是这个)。其实对象是分两部分存储的,一个是对象引用,也就是对象在内存中的地址,存储在栈里(基本类型也是存储在栈里,栈里的东西都是值拷贝),另外一个是对象的内容,存储在堆里。
另外,我们发现String类型很奇怪,它具有基本类型的很多特点,原因之一就是它是final修饰的,既然不可变,那么执行str = "sss"时必然要new新的String,str里存放的是新的String的地址。
分享到:
相关推荐
11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java参数传递.zip11.java...
13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递.zip13.java参数传递之引用传递....
58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递机制.zip58.java参数传递...
主要介绍了JAVA参数传递方式,结合实例形式分析了java按值传递与引用传递区别及相关操作注意事项,需要的朋友可以参考下
关于Java参数传递的PPT,详细介绍参数传递的类型。彻底理解Java只有唯一传递方式——值传递。
这里详细的说明了,java参数传递的过程,引用传递,值传递
主要介绍了java中参数传递方式详解的相关资料,需要的朋友可以参考下
java参数传递 java 参数
Java参数传递的经典教学PPT,引用类型,基础类型传递的区别,String和StringBuffer类型传递的区别。
传值还是传引用 详细讲解JAVA参数传递机制 一目了然
java的参数传递对比,体现了值传递和引用传递的区别,是我在java入门是写的学习demo
62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递.zip62.java引用类型的参数传递....
59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递.zip59.java基本类型的参数传递....
java参数的传递与返回值 江苏省无锡市
介绍java 方法的参数传递,本文是引用传递。
java传递参数的方法 很的东西 大家下载学习一下
Java的引用和函数参数传递Java的引用和函数参数传递Java的引用和函数参数传递Java的引用和函数参数传递
主要介绍了Java数组传递及可变参数操作,结合实例形式详细分析了java数组参数传递与可变参数相关使用技巧,需要的朋友可以参考下
读者将学习Java中方法调用时的参数传递方式,并分别介绍基本类型和引用类型在参数传递过程中的特点和区别。 能学到什么: 学习Java中方法调用时的参数传递方式。 理解基本类型和引用类型在参数传递过程中的特点和...
读者将学习Java中方法调用时的参数传递方式,并重点探讨基本类型和引用类型在参数传递过程中的特点和区别。此外,我们还将介绍可变参数和返回值的使用方法。 能学到什么: 学习Java中方法调用时的参数传递方式。 ...