留言与评论(共有 0 条评论) |
发布时间:2020-04-12 08:41:53
可以考虑下面这段代码,它实现了一个Stack:classStack{privateintStackSize=10;privateint[]intArr=newint[stackSize];privateintindex;//Stack中的下一个可用位置。
记住一点,基本类型是传值,引用类型是传引用,对象是引用类型,所以传的是引用。
那么可能有人会对如下的执行结果产生疑问:public static void main(String[] args) {
String str = "s";
doStr(str);
System.out.println(str);
Integer integer = new Integer(1);
doInt(integer);
System.out.println(integer);
}
public static void doStr(String str) {
str = "sss";
}
public static void doInt(Integer integer) {
integer = 2;
}
输出结果为:
s
1
String和Integer明明是引用类型,为什么值没有被改变?这里要说的就是这两个的特殊性,str = "sss"这一行执行的操作是在常量池寻找匹配的字符串指向该引用,如果没有会执行 str=new String("sss"),这是String类型的特殊性,有兴趣可以学习一下。 而integer = 2这一行执行的是integer = new Integer(2),这就是自动装箱操作,同理,所有基本类型对应的对象类型也是同样的。也就是说,上述操作已经不是对原来被引用对象的操作了,所以对象的值没有改变。
留言与评论(共有 0 条评论) |
全站搜索