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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[AppleScript] 纯文本查看 复制代码
public class Test3 {
	static int i=1;
	static{
		++i;
	}
	public static void main(String[] args) {
		System.out.println(increment(i,5));[color=#ff0000][b]//这里是i=i+5吗,为什么输出是 5?[/b][/color]
		
		display(i);                  [color=#ff0000][b]//这里的i的初始值跟increment(i,5)有关系吗?[/b][/color]
	}
	private static  void display(int n) {
		System.out.println(n);
	}
	private static int increment(int n, int m) {
		return n=+m;
	}
	static{
		++i;
	}

}

7 个回复

倒序浏览
针对你的注释部分来解答
回复 使用道具 举报
首先提示你一下:15行的代码是return n=+m,而不是你注释中理解的return n += m,翻译过来就是retun i = +5了,所以display(i)的结果就是5
回复 使用道具 举报
本帖最后由 Mr_Maty 于 2017-2-23 12:09 编辑

class Test3
{
        static int i = 1;
    static
        {
        ++i;
    }
    public static void main(String[] args)
        {
                System.out.println("Test3在进入main函数的时候i的值为:"+i);   //注意这里,i在经历了两次静态代码块的作用之后i值得已经变成了3
        System.out.println(increment(i,5));//这里是i=i+5吗,为什么输出是 5?  这里你强行将i = 3改变成了i = 5,输出结果当然是5了         
        display(i);                  //这里的i是Test3中的i,当然是么有改变了,increment(i,5)中的i只是复制了Test3中i的值
    }
    private static void display(int n)
        {
        System.out.println(n);
    }
    private static int increment(int n, int m) {
        return n=+m;
    }
    static{
        ++i;
    }

}
回复 使用道具 举报
本帖最后由 Mr_Maty 于 2017-2-23 12:17 编辑

具体知识点请参考java编程思想(第四版)中的相关解释

QQ截图20170223121419.png (214.42 KB, 下载次数: 14)

QQ截图20170223121419.png
回复 使用道具 举报
回复 使用道具 举报
Mr_Maty 发表于 2017-2-23 12:15
具体知识点请参考java编程思想(第四版)中的相关解释

谢谢,学习了
回复 使用道具 举报
程序加载时静态代码块首先执行,所以i=1后被++两次变成了3,increment(i,5)只是将i的值传递了,并没有改变i本身,n=+m只是将m的值赋值给n
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马