如果 dos2unix 命令在 Java 源文件被编译之前运行,是否有任何影响或后果?Java 文件将从 Linux 中的 CVS 存储库下载,然后由 Ant 脚本编译为 jar。谢谢。
问问题
833 次
3 回答
2
甚至不需要测试(理论上):在 Java 语言中,换行符没有语义意义。因此存在是无关紧要的(对于编译器而言)。
因此,人类读者会发现查看具有零换行符的源代码非常不愉快,或者在任何合法的地方都有换行符 - 对于编译器来说,正如所说的:没关系。
因此,像 dos2unix 这样的工具不应该对源代码进行任何可能产生“语义”差异的更改。
当然:真正的答案是:不要花时间担心换行符。投资于将整个系统从 1999 年迁移到 2018 年(例如,用 git 替换 CVS,用 maven/gradle 替换 Ant)。
于 2018-03-06T18:09:15.760 回答
0
不,它所做的只是处理行尾。
于 2018-03-06T17:45:16.787 回答
0
实际测试
首先,我创建了一个带有 Linux 行结尾的测试文件,名为Main.java
.
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 结尾的行是\r\n
.
结果
- 由于 unix2dos / dos2unix 仅更改行尾,因此不会更改内容
- 至少在 Linux 上,javac 可以编译任何一行都成功结束的源文件。
于 2018-03-06T17:50:08.783 回答