我从教程中获得了这行代码
while((line = bufferedReader.readLine()) != null)
它工作正常,但我没有得到这个概念。
Java是否为操作本身line = bufferedReader.readLine()
设置了一个值?
之后看起来像:
line
和line = bufferedReader.readLine()
具有相同的值?。
试图让我测试
String a = "Not null";
String b;
System.out.println( (b = a) );
输出为:Not null
。
问题是。 分配自己的操作(至少暂时)与“=”右边的任何值相同?
答案 0 :(得分:3)
这是assignment conversion的一个例子。赋值的结果是赋值的值。
int a;
int b = a = 0;
来自jls-5.2,
当表达式的值被赋值(第15.26节)给变量时,就会发生赋值转换:必须将表达式的类型转换为变量的类型。
答案 1 :(得分:2)
在你的例子中:
while((line = bufferedReader.readLine()) != null)
line
已分配给bufferedReader.readLine()
,然后检查它是否为空。
在你的第二个例子中:
String a = "Not null";
String b;
System.out.println((b = a));
b被分配给a("Not null"
),然后打印,这就是为什么你会看到"Not null"
作为输出。
答案 2 :(得分:1)
赋值运算符(=)返回已分配的值。您的教程中的行首先评估
bufferedReader.readLine()
如果没有剩余的行要读取,则结果为null。 null!= null计算结果为false,导致while循环在没有更多输入时退出。
同样
b = a
将值“Not Null”赋给b,并返回“Not Null”
答案 3 :(得分:1)
它产生的输出与:
相同line = bufferedReader.readLine();
while(line != null) {
//do stuff in the loop
line = bufferedReader.readLine();
}
在while循环中进行测试之前,从缓冲读取器读取一行并将其分配给变量line
。然后检查line
的值是否为空
这是syntactic sugar的一种形式,用于使代码更短或更容易阅读。
答案 4 :(得分:0)
在java中始终从右到左分配并返回最左边的变量。这是一个例子
public class Test {
static String a="this is a";
static String b= "this is b";
static String c="this is c";
public static void main(String[] args) {
//Simple assignments
//Output=this is c
System.out.println(a=b=c);//assign c value to b and then assign b value to a and return a
}
}