我在查看源代码不兼容性与行为不兼容性之间的区别,但我无法理解它。有人可以解释一下吗
例如,如果Java 8和Java 7之间存在源代码不兼容,这是否意味着尽管在Java 8中运行具有该不兼容性的Java 7编译代码可以正常工作但如果我使用Java 8重新编译该代码,我会得到错误?
答案 0 :(得分:3)
是的,尽管这些案件非常罕见,并且有充分的理由。
我可以想到一个明显的例子,就是以有计划的方式发生 是在引入<title>textBoxes.html</title>
<script type = "text/javascript">
// from textBoxes.html
function repleace(){
var txtName = document.getElementById("txtName");
var txtOutput = document.getElementById("txtOutput");
var name = txtName.value;
if(name == "toni"){
name = "ani";
}
txtOutput.value = name;
}
</script>
<link rel = "stylesheet"
type = "text/css"
href = "textBoxes.css" />
</head>
<body>
<h1>Text Box Input and Output</h1>
<form action = "">
<fieldset>
<label>Type your name: </label>
<input type = "text"
id = "txtName" />
<input type = "button"
value = "GO"
onclick = "repleace()"/>
<input type = "text"
id = "txtOutput" />
</fieldset>
</form>
</body>
</html>
和enum
关键字的时候。
以下将使用Java 1.4编译:
assert
并且仍然可以在任何后来的JVM上运行,但它不会再用Java的更高版本进行编译。或者为了更加明确,如果没有为public void foo() {
int enum = 42;
}
指定-source 1.4
选项,它就无法编译。
compiler bug you cited是一个如何发生意外的示例(即使他们提供的示例代码非常有用,即使您设法编译它,在运行时它只会抛出一个NPE)。