开发者社区> 问答> 正文

怎样解释Java这一现象?:报错

String a = null;
System.out.println(a="aaaaa");
结果输出就不写了,不知道是啥的就和我一样坐板凳等解答吧。 好像这种方式在读取流时用的比较多,以前总是一知半解,今天想用偷懒方法写判断,冒出类似的一句,想弄明白原理。 赋值操作也有返回值?

展开
收起
kun坤 2020-06-08 19:23:40 435 0
1 条回答
写回答
取消 提交回答
  • 其实这种用法在我写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 : 你那种写法其实是 标准输入参数把表达式接收了。 相当于方法调用的时候,定义了一个临时变量接收表达式的值。######麻烦进一步解释一下呗!

    2020-06-08 19:23:46
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载