如果在编译之前对 Java 源文件运行 dos2unix 命令,是否有任何影响或影响?Java 文件将从 Linux 中的 CVS 存储库下载,然后由 Ant 脚本编译到 jar 中。谢谢。
甚至不需要测试这一点(理论上(:在Java语言中,换行符没有任何语义意义。因此,存在是无关紧要的(对于编译器而言(。
因此,人类读者会发现查看零换行符的源代码非常不愉快,或者在它们合法的任何地方使用换行符 - 对于编译器来说,如前所述:没关系。
因此,像dos2unix这样的工具不应该对源代码进行任何可能产生"语义"差异的更改。
当然:真正的答案是:不要花时间担心换行符。从 1999 年到 2018 年,将它投入到移动整个系统中(例如,用 git 替换 CVS,用 maven/gradle 替换 Ant(。
No.它所做的只是处理行尾。
实践测试
首先,我创建了一个带有 Linux 行尾的测试文件,称为 Main.java
,毫不奇怪,在 Linux 上编译。
0x63 [ c] 0x6c [ l] 0x61 [ a] 0x73 [ s] 0x73 [ s]
0x20 [ ] 0x4d [ M] 0x61 [ a] 0x69 [ i] 0x6e [ n]
0x20 [ ] 0x7b [ {] 0x0a [n] 0x7d [ }] 0x0a [n]
0x0a [n]
转换为DOS结局给出了这个:
0x63 [ c] 0x6c [ l] 0x61 [ a] 0x73 [ s] 0x73 [ s]
0x20 [ ] 0x4d [ M] 0x61 [ a] 0x69 [ i] 0x6e [ n]
0x20 [ ] 0x7b [ {] 0x0d [r] 0x0a [n] 0x7d [ }]
0x0d [r] 0x0a [n] 0x0d [r] 0x0a [n]
它仍然编译,转换回来给出:
0x63 [ c] 0x6c [ l] 0x61 [ a] 0x73 [ s] 0x73 [ s]
0x20 [ ] 0x4d [ M] 0x61 [ a] 0x69 [ i] 0x6e [ n]
0x20 [ ] 0x7b [ {] 0x0a [n] 0x7d [ }] 0x0a [n]
0x0a [n]
和以前一样
行尾
Windows(dos(和Linux/Mac(unix(行尾之间的区别在于,在unix上结束的行是n
,而以dos结尾的行是rn
。
结果
- 由于 unix2dos/dos2unix 只更改行尾,因此不会更改内容
- 至少在 Linux 上,javac 可以编译任一行都成功结尾的源文件。