繁体   English   中英

在 JAVA 中赋值

[英]Assigning values in JAVA

我从教程中有这行代码

while((line = bufferedReader.readLine()) != null)

它工作得很好,但我不明白这个概念。 Java 是否为操作本身分配了一个值line = bufferedReader.readLine() 之后看起来像:

lineline = bufferedReader.readLine()具有相同的值?。

试图得到它我测试

  String a = "Not null";
  String b;
  System.out.println( (b = a) );

输出是: Not null

问题是。 赋值操作本身具有(至少在瞬间)与“=”右侧的任何值相同的值。

这是赋值转换的一个例子。 赋值的结果就是赋值的值。

int a;
int b = a = 0;

从 jls-5.2,

将表达式的值分配给变量(第 15.26 节)时会发生赋值转换:表达式的类型必须转换为变量的类型。

在您的示例中:

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"作为输出。

赋值运算符 (=) 返回分配的值。 您的教程中的行首先评估

bufferedReader.readLine()

如果没有更多行可供读取,则结果为空。 null != null 计算结果为 false,导致 while 循环在没有更多输入时退出。

相似地

b = a

将值“Not Null”赋给 b,并返回“Not Null”

它产生与以下相同的输出:

line = bufferedReader.readLine();
while(line != null) {
    //do stuff in the loop
    line = bufferedReader.readLine();
}

在 while 循环中的测试之前,从缓冲读取器读取line并将其分配给变量line 然后根据 null 检查line值。
这是一种语法糖,用于使代码更短或更易于阅读。

在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

}   

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM