我是java和编程的新手,我正在尝试这段代码:
public class Main {
public static void main(String[] args){
int x = 10;
System.out.println(x = 1);
}
}
它确实编译并输出了“1”,但是我的intellij说 x
变量从未被访问,第二个 x
是多余的。一旦我移除第一个 x
变量:
public class Main {
public static void main(String[] args){
System.out.println(x = 1);
}
}
这肯定是不正确的,但根据我的ide int x = 10
; 从未使用过。似乎这个语句的唯一用法是提供 x
*. 我说得对吗?有没有可能给一个变量赋值 System.out.println()
?
4条答案
按热度按时间rsl1atfo1#
有多种方法可以对此进行调试。我建议在指定新值之前打印x的值。这就是如何使用x的现有值。使用它之后,你可以给x赋值。
输出:
6ie5vjzr2#
首先:不要这样做。修改print语句中的变量违反了最小意外原则。
您的第一个示例确实是合法的java代码。问题是,您已经设法混淆了intellij生成有关未使用变量的警告的代码。不足为奇。。。考虑到您的代码所做的是任何程序员都不应该考虑的事情(imo!)。这是一个模糊的intellij错误。
(也许不是虫子。毕竟,赋值之后永远不会引用变量。即使正在使用写入变量的值。不管怎样,你做了一些离奇的事情(依我看),并得到了警告。解决方法:不要这样做。)
第二个例子确实不是合法的java代码。这个
x
必须声明变量。似乎这个语句的唯一用法是提供
x
. 我说得对吗?对的。
是否有可能为中的变量赋值
System.out.println()
?对。第一个例子就是这么做的。你看到的是警告,而不是错误。intellij的java编译器实际上正在生成字节码。。。它们会像人们期望的那样奔跑和行为(模化首先在print调用中看到赋值表达式的完全意外!)
bvjveswy3#
我没有检查您的第一个示例在intellij中是否有警告,但是您的第二个示例没有编译,也不应该编译,因为x从未声明过。
您的第一个示例确实“访问”了x,如果您将代码修改为:
intellij可能在警告您,您的构造是“无用的”,因为x的初始值从未使用过,“正确的”等效代码是:
至于您是否应该在println语句中指定一个变量,这是一种观点,但我认为java程序员一般都会同意您不应该这样做。它是“合法的”,即将编译,但它是一个意外的构造,因此可能很容易被阅读代码的人忽略。
x6yk4ghg4#
你的第一个例子
1
因为分配操作x = 1
实际返回1
. intellij认为您没有访问x
因为你没有;您只访问了的返回值x = 1
.是的,我认为写作
System.out.println(x = 1)
将赋值1
至x
. 然而,正如其他答案所说,不要这样做。