我想知道为什么这条JAVA代码产生的输出与C++中的相同代码不同.
#include "stdafx.h"
#include <iostream>
using namespace std;
class A
{
public:
A(){
this->Foo();
}
virtual void Foo()
{
cout << "A::Foo()" << endl;
}
};
class B : public A
{
public:
B()
{
this->Foo();
}
virtual void Foo()
{
cout << "B::Foo()" << endl;
}
};
int main(int, char**)
{
B objB;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这会产生输出:
A::Foo()
B::Foo()
Run Code Online (Sandbox Code Playgroud)
JAVA代码是:
public class Testa {
public Testa()
{
this.Foo();
}
public static void main(String[] args)
{
Testb b = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Java来查找计算机上安装的Java版本.我有:
List<String> commands = new ArrayList<String>();
commands.add("java.exe");
commands.add("-version");
ProcessBuilder pb = new ProcessBuilder(commands);
pb.directory(new File("C:\\Program Files\\Java\\jdk1.6.0_45\\bin"));
Process p = pb.start();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
但是,运行此命令时,由于stdInput为空,因此永远不会执行while循环.如果我取出commands.add("-version")它,它将获得在命令行上运行"java.exe"命令时输出的输入,因此似乎添加-version争论导致问题,这也表明目录和java.exe命令是正确的.任何帮助,将不胜感激.
我正在调试我的程序,其中某些双打和浮动不相等.我在此之前已经找到了答案,为什么会发生这种情况但却找不到相关信息.例如:
System.out.println(4.4f == 4.4);
Run Code Online (Sandbox Code Playgroud)
这打印错误,
System.out.println(4.5f == 4.5);
Run Code Online (Sandbox Code Playgroud)
打印真实.
有人可以解释为什么JAVA会出现这种情况吗?