关于java中参数传递的几点疑惑

来源:互联网 发布:淘宝一百多的狩猎者 编辑:程序博客网 时间:2024/06/09 22:43

先请看代码:

 

public class NewTest {

 public static void changeS(List<String> list) {
  list.add("ooc");
 }

 public static void changeS(int i) {
  i = i + 1;
 }

 public static void change(String str, char ch[]) {
  str = new String("ttttt");
  ch[0] = 'C';
 }

 public static void changeName(Person p) {
  p.setName("黑狐");
 }

 public static void main(String[] args) {

  List<String> list = new ArrayList<String>();
  list.add("1");
  changeS(list);
  list.add("2");
  System.out.println(list);                                          // 1-----》结果  [1, ooc, 2]

  int i = 0;
  i = i + 1;
  changeS(i);
  i = i + 1;
  System.out.println(i);                                           //   2-----》结果 2

  String str = "World";
  char ch[] = { 'H', 'e', 'l', 'l', 'o' };
  change(str, ch);
  System.out.println(str + " and " + String.valueOf(ch)); //   3-----》结果World and Cello

  Person p = new Person();
  p.setName("雪豹");
  changeName(p);
  System.out.println(p.getName());                                //  4-----》结果  黑狐

 }
}

class Person {
 private String name;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
}

 

近来个人觉得对java传参是只是值传递这个说法比较疑惑,遂列出了上述四种情况研究。

根据查阅资料得知 :

方法参数有2种
1 基本参数(比如int,char等)
2 对象引用(比如数组,String等)

基本参数:没办法进行对传递值进行改变。
对象参数:由于传递后,对对象进行了拷贝,于是都指向了同一个对象。可以对传递值进行改变。

Java中利用方法参数可以做到和不能做到的几种情况:
1 方法不能修改基本类型的参数   (例2)
2 方法可以修改对象参数的状态     (例1  4    和 3中的数组变化)
  因此,即可以修改数组中的一个项或几个项。
3 方法不能让对象参数指向新的对象*   (例3 中的字符串无变化)
  无法对对象进行=,这样是达不到欲达到的对参数中的对象进行重赋值的目的的。

 

 

简单来说 就是:

1、对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没用改变。
2、对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值(属性),那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。

原创粉丝点击