Java问题?类方法和类变量方面?

eclipse运行以下Java例程:

public class Exercise3 {
static String str = "PS";
public static void main(String[] args) {

    Exercise3.noUse(str);

}
public static void noUse(String str) {
    str = "O"+str;
    System.out.println(str);
}

}
console窗口输出:OPS;

修改为以下:

public class Exercise3 {
static String str = "PS";
public static void main(String[] args) {

    Exercise3.noUse(str);
    System.out.println(str);
}
public static void noUse(String str) {
    str = "O"+str;

}

}

输出为:PS;

为什么?有大佬可以解答吗?求教。

示例2中输出的是静态变量str,示例1中输出的是在noUse这个静态代码块内存中的str

https://www.cnblogs.com/zhangyu317/p/11226105.html

这两个str是不一样的,noUse方法里面的那个str只是方法里的变量,和外面的那个str是两个变量

你把noUse里的改成

this.str = "O"+str;

应该就好了

函数传值是复制不是直接用原来的变量,例如你记了一页笔记(原变量),另一个人(函数)想拿去学,那他得需要先抄(参数传递)一份,这时候就算他对他抄的东西做笔记(函数内部处理)你的也不会变;而如果他直接把你的笔记本拿走(引用传值)再做笔记你的笔记就会变了;而第一段代码的意思是他抄走笔记然后看抄的那份做了笔记的结果,而不是原来的那份。

你虽然将str传过去,在另外一个函数的操作并没有改变其本身的值。在C语言中有关于引用传递和值传递的例子,这个其实也是类似的问题。
图片说明

String是用final修改的变量。你传都noUse方法后,相当于把str做了个副本,但是原来的str不会变

变量范围的问题,同名变量外层会被内层覆盖,this.str