java 参数传递方式
来源:互联网 发布:淘宝物流投诉 编辑:程序博客网 时间:2024/04/30 10:09
网上有个很经典的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的地址。
- Java参数传递方式
- Java参数传递方式
- Java参数传递方式
- java 参数传递方式
- java 参数传递方式
- Java参数传递方式
- Java参数传递方式
- Java参数传递方式
- java参数传递方式
- Java参数传递方式
- Java参数传递方式
- Java 参数传递方式
- Java参数传递的方式
- Java参数传递方式总结
- Java参数传递方式总结
- Java参数传递方式总结
- Java中的参数传递方式
- java参数传递方式问题
- Javascript中的面向对象!
- 最后一次支离破碎的善意
- 许你光明的未来
- 图片蒙板的应用
- 吃飯睡覺
- java 参数传递方式
- 主流平板电视厂商的三包政策(截止2010-3-30)
- qmake
- 获取TextBox控件的行数
- 奋斗
- Javascript中的this,call,apply,bind!
- javascript中的this!
- SQL 初学
- 解决TIME_WAIT过多问题