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

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

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

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

    如果你要拓宽了说,C++ JAVA GOLANG 的高级代码不也是存成 0101 的在存储设备里
    liuxey
        30
    liuxey  
       2019-09-25 08:11:57 +08:00
    毫无关系的两个东西,今天早餐吃的质子,有点咸
    hhhsuan
        31
    hhhsuan  
       2019-09-25 09:06:14 +08:00 via Android
    咋删了,还想学习一下
    amiwrong123
        32
    amiwrong123  
    OP
       2019-09-25 12:04:45 +08:00 via Android
    @realpg
    谢谢回答,懂啦。哎,出言不慎闹了个笑话。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   939 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:57 · PVG 04:57 · LAX 13:57 · JFK 16:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.