2019.03.03问题及解析
public class Test {
private int i = 1;//思考private static int i =1的情况
private int add(){
return i++;
}
public static void main(String[] args) {
Test test1 = new Test();
Test test2 = new Test();
test1.add();
test2.add();
System.out.println(test2.add());
}
}
(左右滑动可查看完整代码)
请问上述程序的输出结果是什么?
1.相关知识
i++的作用是在执行完成当前语句后再i+1
++i的时候是在语句执行前先i+1
大家可以设想一下add()中修改为++i又会是什么结果
静态属性与方法属于类,非静态属性与类属于类的实例,当调用时,调用静态的属性与方法,不同的实例调用的是同一个,而调用非静态的属性与方法,不同的实例调用的是各自的属性与方法
所以当两个实例的同一方法对一个静态属性进行操作时,操作都是属于类的属性,是同一个
而当两个实例的统一方法对一个非静态属性进行操作时,操作的是各自实例的属性,并不是同一个
上述几句话非常绕口,所以希望大家认真仔细的阅读理解清楚,才能够更好的理解
2.答案
根据上述知识原理,可以知道,private int i =1时,因为创建了2个对象,每创建一个对象就会在堆中创建一个属于此对象的成员变量i,而对象test2调用了2次,第二次调用的时候,输出的是上次调用之后i自增之后的值所以输出是2;private static int i=1时,这个i就会存储到方法区中的共享区,所以只有一个i,总调用三次所以输出是3(群友@孤傲的最后给予 ~奢饰年华分享)
今天的题目很绕,希望大家能仔细理解,相信小伙伴们一定能弄清楚。
2019.03.04问题
那么今天的问题又来了,大家要继续加油噢!ヾ(๑╹◡╹)ノ"
public class MapTest {
public static void main(String[] args) {
java.util.HashMap<String,String> map = new java.util.HashMap<>();
map.put("name","小刀");
map.put("name","大刀");
System.out.println(map.size());
}
}
(左右滑动可查看完整代码)
请问上述程序的输出结果是什么?为什么?
小伙伴们对题目和扩展有什么想法可以在群里分享或者公众号下方留言一起讨论哦,小刀和小伙伴在学习群里等你来一起监督学习哦,坚持!加油!进群请加小刀微信: best396975802
END
微信群请点击公众号菜单进微信群
文字|天堂
排版|花音
点个好看再走吧~(づ ̄3 ̄)づ╭❤~