当前位置: 代码迷 >> J2SE >> java 值的传接
  详细解决方案

java 值的传接

热度:41   发布时间:2016-04-23 20:33:50.0
java 值的传递

package com.victor.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

class Person {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}

public class Test {

public static void addInteger(Integer i){
i++;
}

public static void addInt(int i){
i++;
}

public static void addStr(String str){
str += "test";
}

public static String addStr2(String str){
return str+= "test";
}

public static void addList(List<String> alist){
alist.add("0");
}

public static List<String> addList2(List<String> alist){
alist.add("0");
return alist;
}

public static void addMap(Map<String,String> amap){
amap.put("1", "2");
}

public static Map<String,String> addMap2(Map<String,String> amap){
amap.put("1", "2");
return amap;
}

public static void modifyPerson(Person p){
p.setAge(11);
p.setName("victor");
}

public static void main(String[] args) {
int i = 0;
Test.addInt(i);
System.out.println("i = " + i);

Integer j = new Integer(1);
Test.addInteger(j);
System.out.println("j = " + j);

String str = "abc";
Test.addStr(str);
System.out.println(str);

List<String> alist = new ArrayList<String>();
System.out.println(alist.size());
Test.addList2(alist);
System.out.println(alist.size());

Map<String,String> amap = new HashMap<String,String>();
System.out.println(amap.size());
Test.addMap(amap);
System.out.println(amap.size());

Person p = new Person();
Test.modifyPerson(p);
System.out.println("name : " + p.getName() + " age : " + p.getAge());

}
}



为什么有得值被改变了,有的没有
------解决方案--------------------
前三个都不会改变
后三个都有可能改变
第一个是变量值,传递的就是一份int值,传进去的拷贝不影响外面
第二个传递引用,但Integer 是不可变对象,它的值一旦new出来,值就不可改变,所以传进方法对最初的Integer值不影响
第三个是传值,传进去的拷贝值不影响最初的原始值
后三个传递的是new出来的对象,都是传递的引用,且没有改变引用的指向,只是修改了对应的属性值,所以后三个都影响了。
  相关解决方案