为什么ThreadLocalRandom.current().nextInt(1,255); 返回值超出范围[1,254]?

so8*_*857 0 java random

我试图生成一个随机正8位整数.ThreadLocalRandom.current().nextInt(min,max)的文档明确指出min是最小包含边界,max是最大独占边界.但是,如果我将max设置为大于128的任何值,我偶尔会得到一个负值.

这似乎与整数的位相关联,但文档没有说明nextInt()的位.我真的需要尽可能多的正8位数字.当我只指定(1,255)的正范围时,为什么nextInt()返回负值?

byte aa = 1;
    do {
            aa = (byte) ThreadLocalRandom.current().nextInt(1, 128);
    } while (aa > 0);
    System.out.println(aa);
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 6

您将结果转换为byte. byte只保存-128到127之间的数字,当nextInt返回大于127的数字时,它会溢出并翻转.

这不是故障nextInt,这是演员的错byte.