static 静态方法的作用

damenggege123 2009-06-30 01:14:01
static void change(String str)
{
str="abcde";
}

public static void main(String[] args)
{
str="1234";
change(str);
System.out.println(str);
}
结果为什么是1234,而不是abcde;
...全文
210 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
superddlz1 2009-07-03
  • 打赏
  • 举报
回复
传值和引用的问题吧
老紫竹 2009-07-03
  • 打赏
  • 举报
回复
一句话:String是不可变的。
linuxlsx 2009-07-02
  • 打赏
  • 举报
回复
引用拷贝。 函数调用是不会改变你传进去的参数的值的,他产生一个拷贝 只是名字相同而已

danier9687 2009-07-02
  • 打赏
  • 举报
回复
支持一楼说法
longq121 2009-06-30
  • 打赏
  • 举报
回复
有这种情况,就是你的str也是静态的
bolink5 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xnjnmn 的回复:]
应该是这样

Java code static String str;
static void change()
{
str="abcde";
}

public static void main(String[] args)
{
str="1234";
change();
System.out.println(str);
}




重新声明了一个变量
change(String str)
[/Quote]
分析的在理
在Java中只有值传递。
南南北北 2009-06-30
  • 打赏
  • 举报
回复

static void change(String str)
{
str="abcde";
}

public static void main(String[] args)
{
str="1234";
change(str);
System.out.println(str);
}

改成

static void change(String notStr)
{
notStr="abcde";
}

public static void main(String[] args)
{
str="1234";
System.out.println(str);
}


大概你会好理解一点.
Miracle1216 2009-06-30
  • 打赏
  • 举报
回复
静态方法只是告诉类在类加载的时候就初始化这个方法。
这里的结果和静态方法没有关系,因为String是值传递,无法改变原来的String,所以结果是1234
sebatinsky 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lovecj6185 的回复:]
我觉得,这并不是静态方法的问题
而应该是个变量作用域的问题。

main方法中的str是个局部变量
也就是说只是在main方法中有效。
同样,change方法中的str也是个局部变量,所以也只是在change方法中有效。

虽然change方法内部改变了str的值,但这个改变只在change方法中有效
你又没有把改变后的str返回,
所以,对于main方法中的str是没有任何影响的
你可以把change方法改成下面这样
Java codestaticvoidchange(Strin…
[/Quote]
哈哈,楼主多注意一下,其实静态与否跟他没有关系了,只要多试试几种方式去做就会得到不一样的效果.
ZiSheng 2009-06-30
  • 打赏
  • 举报
回复
还是传值和引用的问题。
KingZChina 2009-06-30
  • 打赏
  • 举报
回复
String 对象赋值了 就不能变了 除非重新赋值
keyboardsun 2009-06-30
  • 打赏
  • 举报
回复
在一个jvm里面,它的值是唯一的。
sxtbuaa 2009-06-30
  • 打赏
  • 举报
回复
跟静态方法没关系,只要是String类型的参数,都不会修改传入参数的值的。因为String仅仅是对基本类型char的封装,采用基本类型的值传递方式
yuhongpingimu 2009-06-30
  • 打赏
  • 举报
回复
str不是个局部变量么。。。
zhuzhusany 2009-06-30
  • 打赏
  • 举报
回复
因为static void change(String str)并没有改变str的值和状态
java里对象作为参数时,将对象的引用(str)重新赋值(指向另一个对象),并不能改变原来变量(str)的值
lovecj6185 2009-06-30
  • 打赏
  • 举报
回复
我觉得,这并不是静态方法的问题
而应该是个变量作用域的问题。

main方法中的str是个局部变量
也就是说只是在main方法中有效。
同样,change方法中的str也是个局部变量,所以也只是在change方法中有效。

虽然change方法内部改变了str的值,但这个改变只在change方法中有效
你又没有把改变后的str返回,
所以,对于main方法中的str是没有任何影响的
你可以把change方法改成下面这样

static void change(String str){
System.out.println("before,str is:"+str);
str = "change";
System.out.println("after,str is:"+str);
}


就可以发现在change方法内是发生改变了的。

或者,把这个方法改成返回一个String类型的变量,再赋值给main方法的str,也是发生改变的
xnjnmn 2009-06-30
  • 打赏
  • 举报
回复
应该是这样
	static String str;
static void change()
{
str="abcde";
}

public static void main(String[] args)
{
str="1234";
change();
System.out.println(str);
}


重新声明了一个变量
change(String str)
bingsha1976 2009-06-30
  • 打赏
  • 举报
回复
静态方法是类方法

结果为什么是1234,而不是abcde;
这个结果和是否是静态方法没关系

这是因为参数传递采用的是(基本类型)值传递,不是(对象类型)引用传递

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧