Random.nextInt创建超出绑定的整数

pse*_*der 1 java random android

我在android中尝试一个基本的应用程序.以下代码打印出randomNum的32,33,34和35值.为什么这样做?

Button button = (Button) findViewById(R.id.button);final String[] lyrics = {"Caught in a Landslide!","No"," Escape","From Reality..."};
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Random rando = new Random();
            int randomNum = rando.nextInt(4);
            textView.setText(randomNum + ' ' + lyrics[randomNum]);
        }
    });
Run Code Online (Sandbox Code Playgroud)

PS - 它工作正常,只打印出歌词数组中的值.只是randomNum打印怪异!\

rge*_*man 7

randomNum + ' '在串联到字符串之前,首先计算表达式lyrics[random],因为它是从左到右计算的.这两个值都被提升为int.该char ' '被提升为int,导致价值32.随机数(0-3)加到它上面,产生32-35的范围.

通过添加String " "而不是强制字符串连接来正常工作char ' '.

randomNum + " " + lyrics[randomNum]
Run Code Online (Sandbox Code Playgroud)