在java中为println()函数中的变量赋值是否有效?

eqqqjvef  于 2021-07-05  发布在  Java
关注(0)|答案(4)|浏览(404)

我是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() ?

rsl1atfo

rsl1atfo1#

有多种方法可以对此进行调试。我建议在指定新值之前打印x的值。这就是如何使用x的现有值。使用它之后,你可以给x赋值。

int x = 10;
System.out.println("x before assigning new Value :  "+x+"  And X after assigning new Value : "+(x = 1));

输出:

x before assigning new Value :  10  And X after assigning new Value : 1.
6ie5vjzr

6ie5vjzr2#

首先:不要这样做。修改print语句中的变量违反了最小意外原则。
您的第一个示例确实是合法的java代码。问题是,您已经设法混淆了intellij生成有关未使用变量的警告的代码。不足为奇。。。考虑到您的代码所做的是任何程序员都不应该考虑的事情(imo!)。这是一个模糊的intellij错误。
(也许不是虫子。毕竟,赋值之后永远不会引用变量。即使正在使用写入变量的值。不管怎样,你做了一些离奇的事情(依我看),并得到了警告。解决方法:不要这样做。)
第二个例子确实不是合法的java代码。这个 x 必须声明变量。
似乎这个语句的唯一用法是提供 x . 我说得对吗?
对的。
是否有可能为中的变量赋值 System.out.println() ?
对。第一个例子就是这么做的。你看到的是警告,而不是错误。intellij的java编译器实际上正在生成字节码。。。它们会像人们期望的那样奔跑和行为(模化首先在print调用中看到赋值表达式的完全意外!)

bvjveswy

bvjveswy3#

我没有检查您的第一个示例在intellij中是否有警告,但是您的第二个示例没有编译,也不应该编译,因为x从未声明过。
您的第一个示例确实“访问”了x,如果您将代码修改为:

public class Main {
    public static void main(String[] args){
        int x = 10;
        System.out.println(x = 1);
        System.out.println(x);
    }
}

intellij可能在警告您,您的构造是“无用的”,因为x的初始值从未使用过,“正确的”等效代码是:

public class Main {
    public static void main(String[] args){
        System.out.println(10);
    }
}

至于您是否应该在println语句中指定一个变量,这是一种观点,但我认为java程序员一般都会同意您不应该这样做。它是“合法的”,即将编译,但它是一个意外的构造,因此可能很容易被阅读代码的人忽略。

x6yk4ghg

x6yk4ghg4#

你的第一个例子 1 因为分配操作 x = 1 实际返回 1 . intellij认为您没有访问 x 因为你没有;您只访问了的返回值 x = 1 .
是的,我认为写作 System.out.println(x = 1) 将赋值 1x . 然而,正如其他答案所说,不要这样做。

相关问题