关于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的子类,如果你在方法中修改了它的成员的值(属性),那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。
- 关于java中参数传递的几点疑惑
- 关于Java的几点疑惑:枚举
- 关于TCP的几点疑惑???
- 关于CreateThread()的几点疑惑
- 关于keep-alive的几点疑惑
- JAVA中参数传递的迷惑点
- 关于获取chromium最新源代码的几点疑惑
- 关于final关键字的几点疑惑和答案
- 关于java中参数传递的问题
- 关于Java中intern关键词的疑惑
- Java中中关于Calendar类的几点注意事项
- 关于java参数的传递
- C++中传递数组参数的几种用法和注意点
- 有关opencv轮廓的几点疑惑
- C语言的几点疑惑
- getline()函数的几点疑惑
- 关于"Java中方法参数的传递方式"的探讨
- 关于"Java中方法参数的传递方式"的探讨
- 四个 服务器设计模型(42)
- NYOJ-275-队花的烦恼一-2013年10月23日22:51:57
- 同一段代码,不同C编译器,输出结果真的会不同啊!!!
- linux kernel怎么编译单独某个模块
- 带分数
- 关于java中参数传递的几点疑惑
- 串匹配-朴素(brute force)算法
- linux中C语言函数:数据结构函数(二分查找、二叉树、哈希表、线性搜索)
- MySQL 常用命令的使用
- secureCRT中的vi显示多颜色
- Spinner的一些用法
- 文件传输服务器(43)
- 软件开发流程
- C语言中跳出多重循环