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

2019-09-24 21:31:13 +08:00
 amiwrong123
之前写了一篇博客《 Java 泛型的本质——类型擦除》, https://blog.csdn.net/anlian523/article/details/100643209
大家不要笑话我在 csdn 写博客哈。
因为说了“字节码是 0101”,遭到大家的猛烈评论。
3752 次点击
所在节点    程序员
32 条回复
wwti9
2019-09-24 21:33:32 +08:00
因为不是
amiwrong123
2019-09-24 21:34:19 +08:00
@wwti9
那可以说成,符合 jvm 规范的 0101 吗
ooops
2019-09-24 21:43:26 +08:00
所以问问题之前为什么不搜一下什么是 java 字节码?评论已经给你指出问题了,是 google 不好用,还是 wikipedia 没看明白?承认自己错了那么难么?
WordTian
2019-09-24 21:54:56 +08:00
java 字节码不是二进制,是 jvm 虚拟机解析的一种语言,估计楼主没深入了解过
真要类比的话,也应该和汇编语言进行类比
laike9m
2019-09-24 21:58:52 +08:00
LZ 没错,任何东西都是 0101
Yourshell
2019-09-24 22:12:51 +08:00
你怎么不说成是高低电平
fuxiaohei
2019-09-24 22:14:13 +08:00
字节码和机器码不是一回事啊
taogen
2019-09-24 22:18:46 +08:00
任何数据都是用 0101 存储的,通过 0101 可以解码为可读的字符。你说字节码是 0101 就是说它是数据,实际上也没错。
class 文件的 0101 可以转换为 jvm 识别的语言,你可以说它是存储了 Java 虚拟机的指令比说它是 0101 更精确。
另外,使用 javap -c Example.class 可以看到指令。
3789
2019-09-24 22:35:41 +08:00
@amiwrong123 那这样子讲的话,jpg 文件也可以说成符合 jpg 规范的 0101 咯!简直就是脱裤子放屁嘛!😑
xfriday
2019-09-24 22:43:16 +08:00
0101 指的是 cpu 接收 0 (低) 1 (高)电平信号,直接对这些信号做出反馈,而字节码明显不是,字节码要经过 jvm 再次转化变成 0101 给 cpu
jhdxr
2019-09-24 22:48:07 +08:00
按照 LZ 或者 @laike9m #5 的逻辑,那其实我写的 java 代码(*.java ),或者我回复的这篇帖子,不都是 0101 么→_→
taogen
2019-09-24 22:52:58 +08:00
@xfriday 所有东西都是 0101,有些可执行,有些不可执行。字节码的 0101 经过 jvm 转化为 CPU 可执行的 0101
xfriday
2019-09-24 22:55:35 +08:00
@taogen 这叫强行解释,没有实际意义
huaouo
2019-09-24 23:05:28 +08:00
@WordTian 错误,Java 字节码是二进制 .class 文件,你说的是反编译成的助记符形式,那玩意才能类比汇编语言。
maokabc
2019-09-24 23:23:31 +08:00
这不废话吗?什么不是 0101?与字节码相对的是机器码,javap 那种格式类比汇编语言,还有扩展过的 jasmin 可以自己编写生成 class。
deorth
2019-09-24 23:28:10 +08:00
楼主自闭了
leafdream
2019-09-24 23:32:02 +08:00
多看书
anoper
2019-09-24 23:34:53 +08:00
我觉得应该这么解释吧:字节码是在 jvm 上能够被解读的指令数据。计算机世界里直接说某个数据是 0101 没有意义,就好比你说图片,文字,utf-8 一样,也是 0101 的存储和 cpu 计算执行,但是他们都是有区别的,需要不同的方式,在不同的工具或者定义类型上,按照约定去读取解读成有意义的数据。
WordTian
2019-09-24 23:40:52 +08:00
@huaouo 真要细扣的话,你说的对,我的类比确实也不太恰当
编译型语言一般是,源码 -> 机器码 -> CPU 执行
解释型语言一般是,源码 -> 某类字节码 -> (经虚拟机解释)形成机器码 -> CPU 执行
lujjjh
2019-09-25 00:14:42 +08:00
结合前后文能理解你想表达的意思——Java 字节码之于 JVM 就好比机器码之于真实的机器,JVM 没法直接执行 Java 源代码,而是执行经过编译后的 Java 字节码,就像真实的机器只能执行机器码。引出 JVM 并没有对泛型提供支持,Java 的泛型完全是由编译器实现的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603850

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX