A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马吕世成 中级黑马   /  2012-11-3 19:18  /  1743 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test
{
          String str = new String("");


}

class ThreadOne extends Thread
{
            Test tt = new Test();
            public void run()
            {
                    int i = 0;
                    while(i<3)
                    {
                       System.out.println("ThreadOne str = "+tt.str);
                       i++;
                    }
            }

            public ThreadOne(Test tt)
            {
                  this.tt = tt;//tt = tt
            }

}

class ThreadTwo extends Thread
{
            Test tt = new Test();
            public void run()
            {
                    int i = 0;
                    while(i<3)
                    {
                   i++;
                   System.out.println("ThreadTwo str = "+tt.str);
                    }
            }

            public ThreadTwo(Test tt)
            {
                      this.tt = tt;//tt = tt
            }

}

class Main
{
            public static void main(String[] args)
            {
                        Test tt = new Test();
                        new ThreadOne(tt).start();
                        try{Thread.sleep(10);}catch(Exception e){}
                        new ThreadTwo(tt).start();
}


上面代码中,用this与不用this有区别吗!?说说看法,我已经测试过,最后会给出答案,不过我的也不一定是正解,所以大家给点观点。嘿嘿

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

5 个回复

倒序浏览
当然有区别...this是指当前类里的,而不是当前方法,应该说是该类,相对有个super是父类(这句是废话可以不看).

总的来说就是范围不同.

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
qwepoidjdj 发表于 2012-11-3 20:34
当然有区别...this是指当前类里的,而不是当前方法,应该说是该类,相对有个super是父类(这句是废话可以不看). ...

但是在类里面使用该类的属性可以不用加this啊!?
回复 使用道具 举报
黑马吕世成 发表于 2012-11-3 21:21
但是在类里面使用该类的属性可以不用加this啊!?

?名字有相同的时候编译器容易容易搞混,推荐还是加this.用来区分,别一回头不认识了.
回复 使用道具 举报
黑马吕世成 来自手机 中级黑马 2012-11-13 00:45:25
报纸
黑马吕世成 发表于 2012-11-3 19:18:25
class Test
{
          String str = new String("");}

class ThreadOne extends Thread
{
      

这个问题就是this应用中的一种,用于区分局部变量和成员变量。如果不加this虚拟机读到tt的时候,先从方法中查找是否存在该变量,如果有则tt指向的就是局部变量。否则会继续从外部中去找。来自: Android客户端
回复 使用道具 举报
当然有区别。如果你的局部变量用了和整个类的全局变量(非static)同名的名字.

你要访问该全局变量,必须要用this指定。否则就默认是该局部的变量。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马