繁体   English   中英

为什么Char不打印,并且计数器超出了我的循环;

[英]Why Char won't print, and counter exceeded my loop;

我试图同时运行这三个线程,但是当我执行system.print Char时不会出来,并且计数器“ i”越界。

不知何故,我在Char前面添加了一个字符串,它可以正确打印出来,任何人都可以向我解释为什么会这样?

    public class Part2 {
    public static void main(String[] args) {            
        Runnable printA = new PrintChar('a');
        Runnable printB = new PrintChar('b');
        Runnable printC = new PrintChar('c');

        Thread t1 = new Thread(printA);
        Thread t2 = new Thread(printB);
        Thread t3 = new Thread(printC);

        t1.start();
        t2.start();
        t3.start();     
    }

    private static class PrintChar implements Runnable { 
        private char c;
        public PrintChar(char c) {
            this.c = c;
        }

        public void run() 
        { 
            for(int i = 1; i<=100; i++) {
                System.out.print(c + i + ", ");
            }
        } 
    } 
    }

/ *这是此代码的输出:98、100、101、102、103、104、105、99、99,.... 198,* /

/ *如果我像这样在Char之前添加一个String,这是我期望的输出; * /

        public void run() 
        { 
            for(int i = 1; i<=100; i++) {
                System.out.print("" + c + i + ", ");
            }
        } 

/ * b1,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,.... a1〜a100 b1〜b100和c1〜c100同时运行并完成* /

charint上使用+运算符时,它将执行算术加法,而不是字符串连接。 首先放置"" +表示您首先要进行"" + c (将其串联到一个String ,然后将该String添加到一个int ,这是另一个串联。

+运算符在Java中有两个含义。 它可以代表:

  • 另外,如果两个操作数都是数字类型,并且char被视为数字类型,因为内部其值是代表Unicode表中字符位置的数字,例如'a' ,它将是97(十进制,或61十六进制)。

  • 如果至少一个操作数是String,则串联

同样,由于评估是从左到右进行的,因此c + i + ", "等于(c + i) + ", " (c + i) ci均为数字类型,因此+表示加法并计算'a'+1 ,其中前面提到的'a'被视为97,因此您看到的97+1结果为98。

在那之后的下一个操作是98 + ", " ,这里的第二个操作数是String,所以这里+表示串联。 因此98 + ", "字符串"98, "


"" + c + i + ", "情况下"" + c + i + ", "由于从左到右的评估顺序,我们可以将其表示为(("" + c) + i) + ", "

  • 首先("" + c)将被“计算”,并且由于第一个操作数为String +表示串联,因此我们以String "a" "" +'a'结果结束。
  • 接下来执行"a" + i ,这里的第一个操作数也是String类型,因此+也表示串联,结果是字符串"a1"
  • 最后执行"a1" + ", " 这里两个操作数都是字符串,所以+是连接,结果为"a1, "字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM