iteye_17041 2014-11-04 00:39
浏览 245
已采纳

java的隐式变量

我很好奇。比如
System.out.println(1+1);

这里的1+1并没有赋值给任何变量,
但是jdk内部是不是会默认赋值给一个我看不见的变量。
比如int rs = 1+1;

还是没有变量,只是在内存开辟一个空间,存储而已?

  • 写回答

2条回答 默认 最新

  • iteye_12702 2014-11-04 16:25
    关注

    使用jdk自带的javap查看字节码:
    源文件:
    package com.an;

    public class TestJavacVerbose
    {
    public static void main(String[] args)
    {
    System.out.println(1+1);
    }
    }

    cmd下运行:
    E:\anWorkSpace\pra_test\src\main\java\com\an>javap -c TestJavacVerbose
    Compiled from "TestJavacVerbose.java"
    public class com.an.TestJavacVerbose extends java.lang.Object{
    public com.an.TestJavacVerbose();
    Code:
    0: aload_0
    1: invokespecial #1; //Method java/lang/Object."":()V
    4: return

    public static void main(java.lang.String[]);
    Code:
    0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
    3: iconst_2
    4: invokevirtual #3; //Method java/io/PrintStream.println:(I)V
    7: return
    }

    注意倒数第四行:iconst_2就是说把常量2放入栈中。也就是说2是放在class文件的常量池中的,再具体说就是类加载器加载class文件的时候,才把这个2放到方法区的常量池中,在class文件中时它只是占用了一点点字节来存储。
    结论:没有你说的变量,只是占用了一点空间存储了这个编译期就明确的常量而已。几乎所有编译期就能确定的内容都是这样的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条