java运行顺序搞不清楚

有三个线程,启动后都执行pass方法,然后将线程各自的name和address传递给pass方法,传的name和address值第一个字母都是相同的。count、name、address是共享变量。一直想不明白为什么下面两种写法得到的结果不一样,实在想不明白了,希望能有人帮帮忙,万分感谢!

public  void pass(String Pname,String Paddress){
        this.count++;
        this.Pname=Pname;
        this.Paddress=Paddress;
        check();
    }
private  void check(){
        if(Pname.charAt(0)!=Paddress.charAt(0))
            System.out.println("*******broken********"+toString());
    }

上面的pass方法调用和下面的有什么区别?在多线程不加pass方法不加synchronized的情况下为什么两者的运行情况完全不一样?

public  void pass(String Pname,String Paddress){
        this.count++;
        this.Pname=Pname;
        this.Paddress=Paddress;
        if(Pname.charAt(0)!=Paddress.charAt(0))
            System.out.println("*******broken********"+toString());
    }

哈哈哈,楼主,又遇到了~
同刚刚那个问题,应该是this的问题
第一个方法里面,那个Pname和Paddress,是方法内定义的,你的check()方法,没有传参进去,那么pass方法内定义的变量,是传不进入的
所以check()方法拿到的值,应该是你的类成员变量的值
但是第二个方法就不一样了,他方法内定义了局部变量,那么在同一方法中,Pname和Paddress的值,就是你前面定义的局部变量的值了

我只是这么推测,感觉很可能是这样的,你可以打断点看看是不是这样的

你看到的代码的顺序不一定是执行顺序