首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  程序员

为啥说成“字节码是 0101”就会遭到这样的口诛笔伐

  •  
  •   amiwrong123 · 57 天前 via Android · 2510 次点击
    这是一个创建于 57 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前写了一篇博客《 Java 泛型的本质——类型擦除》, https://blog.csdn.net/anlian523/article/details/100643209
    大家不要笑话我在 csdn 写博客哈。
    因为说了“字节码是 0101”,遭到大家的猛烈评论。
        1
    wwti9   57 天前   ♥ 1
    因为不是
        2
    amiwrong123   57 天前 via Android
    @wwti9
    那可以说成,符合 jvm 规范的 0101 吗
        3
    ooops   57 天前   ♥ 9
    所以问问题之前为什么不搜一下什么是 java 字节码?评论已经给你指出问题了,是 google 不好用,还是 wikipedia 没看明白?承认自己错了那么难么?
        4
    WordTian   57 天前
    java 字节码不是二进制,是 jvm 虚拟机解析的一种语言,估计楼主没深入了解过
    真要类比的话,也应该和汇编语言进行类比
        5
    laike9m   57 天前 via Android   ♥ 1
    LZ 没错,任何东西都是 0101
        6
    Yourshell   57 天前   ♥ 4
    你怎么不说成是高低电平
        7
    fuxiaohei   57 天前   ♥ 1
    字节码和机器码不是一回事啊
        8
    taogen   57 天前 via Android
    任何数据都是用 0101 存储的,通过 0101 可以解码为可读的字符。你说字节码是 0101 就是说它是数据,实际上也没错。
    class 文件的 0101 可以转换为 jvm 识别的语言,你可以说它是存储了 Java 虚拟机的指令比说它是 0101 更精确。
    另外,使用 javap -c Example.class 可以看到指令。
        9
    3789   57 天前 via Android
    @amiwrong123 那这样子讲的话,jpg 文件也可以说成符合 jpg 规范的 0101 咯!简直就是脱裤子放屁嘛!😑
        10
    xfriday   57 天前   ♥ 1
    0101 指的是 cpu 接收 0 (低) 1 (高)电平信号,直接对这些信号做出反馈,而字节码明显不是,字节码要经过 jvm 再次转化变成 0101 给 cpu
        11
    jhdxr   57 天前
    按照 LZ 或者 @laike9m #5 的逻辑,那其实我写的 java 代码(*.java ),或者我回复的这篇帖子,不都是 0101 么→_→
        12
    taogen   57 天前 via Android
    @xfriday 所有东西都是 0101,有些可执行,有些不可执行。字节码的 0101 经过 jvm 转化为 CPU 可执行的 0101
        13
    xfriday   57 天前
    @taogen 这叫强行解释,没有实际意义
        14
    huaouo   57 天前 via Android
    @WordTian 错误,Java 字节码是二进制 .class 文件,你说的是反编译成的助记符形式,那玩意才能类比汇编语言。
        15
    maokabc   57 天前 via Android
    这不废话吗?什么不是 0101?与字节码相对的是机器码,javap 那种格式类比汇编语言,还有扩展过的 jasmin 可以自己编写生成 class。
        16
    deorth   57 天前
    楼主自闭了
        17
    leafdream   57 天前
    多看书
        18
    anoper   57 天前
    我觉得应该这么解释吧:字节码是在 jvm 上能够被解读的指令数据。计算机世界里直接说某个数据是 0101 没有意义,就好比你说图片,文字,utf-8 一样,也是 0101 的存储和 cpu 计算执行,但是他们都是有区别的,需要不同的方式,在不同的工具或者定义类型上,按照约定去读取解读成有意义的数据。
        19
    WordTian   57 天前
    @huaouo 真要细扣的话,你说的对,我的类比确实也不太恰当
    编译型语言一般是,源码 -> 机器码 -> CPU 执行
    解释型语言一般是,源码 -> 某类字节码 -> (经虚拟机解释)形成机器码 -> CPU 执行
        20
    lujjjh   57 天前
    结合前后文能理解你想表达的意思——Java 字节码之于 JVM 就好比机器码之于真实的机器,JVM 没法直接执行 Java 源代码,而是执行经过编译后的 Java 字节码,就像真实的机器只能执行机器码。引出 JVM 并没有对泛型提供支持,Java 的泛型完全是由编译器实现的。
        21
    joooooker21   57 天前
    记事本打开看一下不就知道了?
        22
    amiwrong123   57 天前 via Android
    @fuxiaohei
    直接说 0101 就认为,0101=二进制文件=机器码,这样呗
        23
    ysc3839   57 天前 via Android
    先说我的理由:因为这是废话,大家都知道计算机底层是二进制运算的,但是实际与用户交互的时候几乎很少使用二进制的。编程也是这样,好像就只有位运算能跟二进制沾点边,其他情况下几乎不会涉及二进制。
    而看了一下评论区,其他人大概认为你想表达的是 Java 编译成了原生的机器代码,这个是个人理解的问题。
        24
    widewing   57 天前 via Android
    是多不专业才会把字节码说成 0101 啊
        25
    reus   57 天前
    0101 是一个数值的二进制表示
    字节码就是字节码
    你可以说字节码可以用 0101 表示,但字节码同样可以用 0xabcd 表示,所以你不能说字节码就是 0101
        26
    reus   57 天前
    “数”和“数的表示”,就是这两个概念的区别。
        27
    amiwrong123   57 天前 via Android
    @lujjjh
    嗯,还是你懂我,不过你讲的思路比较清晰。我只是想简单讲一下字节码的概念,然后引出泛型的原理和类型擦除。
        28
    lincanbin   57 天前 via Android
    不止字节码是 0101,视频、网页、图片、源代码、编译出来的二进制也都是 0101。
    这句话跟李彦宏是男人一样,正确但是没有意义。
        29
    realpg   57 天前
    @amiwrong123 #22

    一般来说,虽然不严谨,在编程领域讨论多层级的执行过程,0101 就指机器码
    大概隐含的意思是直接能执行的 0101

    如果你要拓宽了说,C++ JAVA GOLANG 的高级代码不也是存成 0101 的在存储设备里
        30
    liuxey   57 天前
    毫无关系的两个东西,今天早餐吃的质子,有点咸
        31
    hhhsuan   57 天前 via Android
    咋删了,还想学习一下
        32
    amiwrong123   57 天前 via Android
    @realpg
    谢谢回答,懂啦。哎,出言不慎闹了个笑话。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4159 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 32ms · UTC 08:39 · PVG 16:39 · LAX 00:39 · JFK 03:39
    ♥ Do have faith in what you're doing.