怎样解释Java这一现象?

负心杏 发布于 2015/07/09 15:14
阅读 762
收藏 1
String a = null;
System.out.println(a="aaaaa");

结果输出就不写了,不知道是啥的就和我一样坐板凳等解答吧。

好像这种方式在读取流时用的比较多,以前总是一知半解,今天想用偷懒方法写判断,冒出类似的一句,想弄明白原理。

赋值操作也有返回值?





加载中
0
刘越
刘越

其实这种用法在我写Java程序中用的也比较多,例如:

public class Test1 {
	public static void main(String[] args) {
		System.out.println(test(1));
		System.out.println(a);
	}
	public static int a;
	public static int test(int v){
		return a = v;
	}
}



这种连续赋值在Java中是合法的

例如:

a = b = c;

等价于:

b = c;

a = b;

刘越
刘越
你原来的那个代码等同于: String a = null; a = 'aaaa'; System.out.println(a);
0
卧枝会中田
卧枝会中田

看原理请下Bytecode 插件 不要猜

0
12叔
12叔
好像 没看出啥不对
0
wywincl
wywincl
如果Java赋值操作没有返回值,你这个语法就编译不通过了,Python, Lua赋值操作就没有返回值。
卧枝会中田
卧枝会中田
Bytecode 已经解释的很清楚了,赋值没有返回值,先把a赋值"aaaaaa" 然后再输出
0
右括号
String a=null;
String b=(a="aaaaa");
System.out.println(b);
0
番茄酱汁
番茄酱汁
异常!!!
0
Carlos_Tse
Carlos_Tse

举个同样的例子给楼主解惑吧:

BufferedReader reader = new BufferedReader(new FileReader(new File("")));
        String line = null;
        while(null != (line = reader.readLine())){
            //TODO
        }



0
百世经纶之傲笑红尘
百世经纶之傲笑红尘

哥来教教你吧

String a=null;

a="aaa";

System.out.print(a);

这样才对

0
J
Jwxl

哈哈,LZ你有必要知道一点"实际中java源码编译成class的时候有各种优化的"

具体的运行代码还得看class文件格式(严格说还得看jvm实现)

0
魔法刀客
魔法刀客
public class ExperTest { public static void testNotArgs(){ } public static void testAsrg(String a){ } public void testExper(){ String a = null; a = "aaaaa"; testNotArgs(a = "aaaaa"); testAsrg(a = "aaaaa"); } } testNotArgs(a = "aaaaa");编译报错,希望这个能给你提示。
Soong
Soong
回复 @魔法刀客 : Thank you
魔法刀客
魔法刀客
回复 @Soong : 你那种写法其实是 标准输入参数把表达式接收了。 相当于方法调用的时候,定义了一个临时变量接收表达式的值。
Soong
Soong
麻烦进一步解释一下呗!
返回顶部
顶部