String a = null; System.out.println(a="aaaaa");结果输出就不写了,不知道是啥的就和我一样坐板凳等解答吧。 好像这种方式在读取流时用的比较多,以前总是一知半解,今天想用偷懒方法写判断,冒出类似的一句,想弄明白原理。 赋值操作也有返回值?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
其实这种用法在我写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);###### 看原理请下Bytecode 插件 不要猜
######好像 没看出啥不对######如果Java赋值操作没有返回值,你这个语法就编译不通过了,Python, Lua赋值操作就没有返回值。######Bytecode 已经解释的很清楚了,赋值没有返回值,先把a赋值"aaaaaa" 然后再输出######String a=null;
String b=(a="aaaaa");
System.out.println(b);######异常!!!###### 举个同样的例子给楼主解惑吧:
BufferedReader reader = new BufferedReader(new FileReader(new File("")));
String line = null;
while(null != (line = reader.readLine())){
//TODO
}
String a=null;
a="aaa";
System.out.print(a);
这样才对 ###### 哈哈,LZ你有必要知道一点"实际中java源码编译成class的时候有各种优化的"
具体的运行代码还得看class文件格式(严格说还得看jvm实现) ######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");编译报错,希望这个能给你提示。######回复 @魔法刀客 : Thank you######回复 @Soong : 你那种写法其实是 标准输入参数把表达式接收了。 相当于方法调用的时候,定义了一个临时变量接收表达式的值。######麻烦进一步解释一下呗!