java - 阴影静态变量(全局变量)
问题描述
为什么在下一个代码中我得到 pro.x=11?。它应该是 22。请有人扔灯。
public class Pro {
static int x=11;
public static void main(String[] args) {
Pro pro=new Pro();
pro.call(5);
System.out.println(Pro.x);
System.out.println(pro.x);
}
public void call(int x){
x=22;
}
}
解决方案
您没有将静态/全局变量设置为 22,而是将传递的参数的值设置为。考虑到它是一个原始值,使用按值调用而不是按引用调用。
编辑:事实上,正如评论中所指出的,java 没有按引用调用,而是按引用值调用。
如果你只是想改变全局变量,你的函数不需要参数,你可以这样做:
public class Pro {
static int x=11;
public static void main(String[] args) {
Pro pro=new Pro();
pro.call();
System.out.println(Pro.x);
System.out.println(pro.x);
}
public void call(){
Pro.x=22;
}
}
推荐阅读
- c++ - 带有 __PRETTY_FUNCTION__ 的自定义错误处理程序
- c - 跟踪静态内联函数
- r - 在R中添加向量中的每个元素而不使用“SUM”函数
- wso2 - 尝试获取资源时出现 WSO2 NetworkError
- c - 如何修复'Alrady打印最后一行元素的所有数组元素'
- machine-learning - 为什么 PCA 效果很好,而保留的总方差很小?
- laravel-5 - 如何将生成的条形码发送到 laravel 中的电子邮件?
- sql - 如何在使用自联接时省略一些特定数据
- angular - 服务内的Angular 4调用函数
- php - 带有 PHP 的 HTML5 电子邮件表单不发送电子邮件