var ints = new List< int >( new[ ] {
1,
2,
3,
4,
5
} );
var first = true;
foreach( var v in ints ) {
if ( first ) {
for ( long i = 0 ; i < int.MaxValue ; ++i ) { //<-- The thing I iterate
ints.Add( 1 );
ints.RemoveAt( ints.Count - 1 );
}
ints.Add( 6 );
ints.Add( 7 );
}
Console.WriteLine( v );
first = false;
}
如果你注释掉的内部循环,它会抛出,这显然是因为我们对集合做了更改。
如果取消注释,为什么这个循环允许我们添加这两项?运行它需要一段时间(在奔腾CPU上)大约半分钟,但它不会抛出,有趣的是,它输出:
这有点出乎意料,但它表明我们可以改变,它实际上改变了集合。知道为什么会发生这种行为吗?
问题是List的方式
如果您几乎更改了代码的任何内容—添加1或3个值,而不是2个值,或者将内部循环的迭代次数减少1,那么它将按预期引发异常。
(这是一个实现细节,而不是指定的行为,这是一个实现细节,在非常罕见的情况下可以作为一个bug来观察。然而,在实际程序中看到它导致问题是非常罕见的。)
问题内容: 考虑以下Java源代码: 该是。 为什么该语句有时会抛出? 谢谢。 问题答案: 线程安全 如果您的代码是多线程的,则有可能。例如: 如果在语句执行之后(但在循环之前)立即将另一个线程设置为,则您将获得一个。通过使用访问器(与延迟初始化结合使用)可以避免这种情况。 另外,如其他人所提到的,如果可能,请避免使用有利于泛型的此类循环构造。有关详细信息,请参见其他答案。 配件提供保护 如果始终
在index.hpp中,我创建了一个具有多个数据成员的类,如、等。我在类外部定义了一个构造函数。在program.cpp中,我创建了一个名为SAM的对象。当我试图编译它时,它显示错误。什么原因? Program.cpp index.hpp 错误信息
我想了解为什么一段代码不会抛出NullPointerException。 请考虑以下代码: 方法被重复调用,同时以下代码在单独的线程中运行: 只有一个实例。 从不引发NullPointerException。 但是,当方法暂停时,即使暂停0毫秒,也会按预期引发NullPointerException: 我的理解是,在理论上,在检查和调用之间存在竞争条件。在实践中,如果不引入暂停(即从后续方法调用中
问题内容: 我正在从我的一个类中执行Java二进制文件,并且抛出ClassNotFoundException: Geoline类位于/home/geo/Geoline.java。关键是,无论我位于文件系统中的哪个位置,如果我手动执行相同的命令,都将执行该类。使用Runtime.getRuntime()。exec执行二进制文件时,为什么不会发生相同的事情? 编辑:这是在verbose标记上生成的输出
我正在编码一个不和谐机器人,它检查用户是否在我的不和谐服务器上,以及他是否有某个角色。然而,我得到一个错误消息,如果用户不是在我的不和,尽管使用捕捉。我有以下代码: 现在,错误消息是: (节点: 15184)UnhandledPromiseRejtionWarning: DiscordAPIError:未知成员在请求Handler.execute(c:\用户\用户\桌面\DiscordBot\My
我期望这段代码(在对细化类型使用模式匹配后调用匿名类的方法) 要打印 (以及未经检查的警告)。 我知道由于类型擦除,匹配总是成功的,但这不应该导致问题,因为的运行时类型(甚至考虑擦除)应该是