【发布时间】:2013-07-10 19:39:16
【问题描述】:
给定以下 2 个类 Example1 和 Example2 并排除所有性能特征,这两个类的操作方式是否完全相同。也就是说,无论 methodA 或 methodB 多么简单或复杂,在所有可能的条件下(内部和外部)运行这两个类的结果是否总是绝对相同 ?
示例1
public class Example1
{
public static void main (String [] args)
{
try
{
// this will not compile since nextBoolean() is not static
// boolean t = java.util.Random.nextBoolean();
// changed to
java.util.Random r = new java.util.Random();
boolean t = r.nextBoolean();
if (t)
{
methodA();
methodB();
}
}
catch (Throwable t)
{
t.printStackTrace(System.out);
}
}
private static void methodB ()
{
// code goes here
}
private static void methodA ()
{
// code goes here
}
}
示例2
public class Example2
{
public static void main (String [] args)
{
try
{
boolean t = java.util.Random.nextBoolean();
if (t)
{
methodA();
}
if (t)
{
methodB();
}
}
catch (Throwable t)
{
t.printStackTrace(System.out);
}
}
private static void methodB ()
{
// code goes here
}
private static void methodA ()
{
// code goes here
}
}
【问题讨论】:
-
是的,他们会给你同样的输出。
-
您基本上是在问
if语句在Java 语言中是否可靠地工作?我打算出去说它确实如此。 -
这取决于您所说的“相同方式”。由于
Random.nextBoolean调用引入的随机性,两次执行不一定会产生相同的结果。但是,它们都遵循相同的执行路径,因为它们都将以相同的顺序对相同的变量执行相同的操作,只是Random引入了可变性,因为种子发生了变化(这是输入之一)。
标签: java class equivalent