问一个关于Java方法中参数的传递问题
方法的参数传递分为值传递和引用传递。可是为什么String对象作为参数传递的时候,结果是和值传递一样的呢?而不是引用传递packageend.thinkinjava.ch...
方法的参数传递分为值传递和引用传递。可是为什么String对象作为参数传递的时候,结果是和值传递一样的呢?而不是引用传递
package end.thinkinjava.chart02;
/**
难道String类型不是引用变量吗?
*/
//值作为方法参数与引用作为方法参数
public class Demo01 {
/**
* @param args
*/
public static void main(String[] args) {
//值传递与引用传递
String s = new String("abc");
Person p = new Person();
p.setName("NewName");
p.setAge(15);
System.out.println(p);
System.out.println(s);
System.out.println("-------------------------");
change(s);
change(p);
System.out.println(p);//变化
System.out.println(s);//不变
}
private static void change(Person p) {
p.setName("NewName_Old");
p.setAge(20);
}
private static void change(String s) {
s = new String("abc_New");
}
}
class Person{
private String name;
private int age;
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Name:"+this.getName()+" -- "+"Age:"+this.getAge();
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
} 展开
package end.thinkinjava.chart02;
/**
难道String类型不是引用变量吗?
*/
//值作为方法参数与引用作为方法参数
public class Demo01 {
/**
* @param args
*/
public static void main(String[] args) {
//值传递与引用传递
String s = new String("abc");
Person p = new Person();
p.setName("NewName");
p.setAge(15);
System.out.println(p);
System.out.println(s);
System.out.println("-------------------------");
change(s);
change(p);
System.out.println(p);//变化
System.out.println(s);//不变
}
private static void change(Person p) {
p.setName("NewName_Old");
p.setAge(20);
}
private static void change(String s) {
s = new String("abc_New");
}
}
class Person{
private String name;
private int age;
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Name:"+this.getName()+" -- "+"Age:"+this.getAge();
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
} 展开
3个回答
2014-07-25
展开全部
被String引用的那个对象不可以被修改,但这个引用可以指向别的对象——这是String的基本属性
或者奇葩一点说,Java中,引用也是一种值。所以搜索一下也能看到这样的说法:“java中只有值传递,没有引用传递”
或者奇葩一点说,Java中,引用也是一种值。所以搜索一下也能看到这样的说法:“java中只有值传递,没有引用传递”
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1)方法的参数可以看做是方法内的局部变量
2)change(s)方法内操作的是引用,change(p)方法内操作的是对象,所以改变了
2)change(s)方法内操作的是引用,change(p)方法内操作的是对象,所以改变了
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
private static void change(String str)
String s = new String("abc");
change(s);
change(str)相当于:
String str=s;
str=new String("abc_New");
实际传递的是引用的副本
People传递的是引用,引用和引用的副本指的是同一个对象。
而String的副本设为一个新的字符串,原字符串不变。
String s = new String("abc");
change(s);
change(str)相当于:
String str=s;
str=new String("abc_New");
实际传递的是引用的副本
People传递的是引用,引用和引用的副本指的是同一个对象。
而String的副本设为一个新的字符串,原字符串不变。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询