设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
Integer是封装类型,也就是对象,为什么在参数传递时任 ...
1
2
/ 2 页
下一页
返回列表
发新帖
Integer是封装类型,也就是对象,为什么在参数传递时任然时值传递而不是引用传递呢
[复制链接]
11
|
10
|
2021-1-27 06:48:26
|
显示全部楼层
|
阅读模式
publicclassDemo2_5{
publicstaticvoidmain(String[]args){
Integera=newInteger(1);
Integerb=newInteger(2);
swap(a,b);
System.out.println("a="+a+"b="+b);
}
publicstaticvoidswap(Integera,Integerb){
Integertemp=a;
a=b;
b=temp;
}
}
运行结果:a=1b=2
Integer是封装类型,也就是对象,为什么在参数传递时任然时值传递而不是引用传递呢
分 -->
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
publicclassDemo2{
publicstaticvoidmain(String[]args){
Integera=newInteger(1);
change(a);
//输出结果仍然是1
System.out.println("a="+a);
}
privatestaticvoidchange(Integera){
a=newInteger(5);
}
}
楼主的代码可以简化成上面这个,问题还是一样。
Integer是引用数据类型,但是里面的value属性是final修饰的,意思是常量不可变。
主方法把a的地址传给change方法,但是它拿到了a的地址却不能改变a指向的变量的值,只能把原来的地址改成指向“5”,当然对主方法里面的a没影响了。(注意,change方法里的a是局部变量,他和主方法里面的a不是同一个变量。
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
我补充下我楼上的回答,楼上说的有个地方不对:出现这个情况和value的值变不变是没关系的。
我把楼主的swap方法的形参名字改了一下:
publicclassDemo2_5{
publicstaticvoidmain(String[]args){
Integera=newInteger(1);
Integerb=newInteger(2);
swap(a,b);
System.out.println("a="+a+"b="+b);
}
publicstaticvoidswap(Integeraa,Integerbb){
Integertemp=aa;
aa=bb;
bb=temp;
}
}
以上的改动是对源程序没有任何影响的!!!
你在下意识地把主方法的a和swap方法的a当作同一个对象。
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
引用2楼DoNotKnowYou的回复:
我补充下我楼上的回答,楼上说的有个地方不对:出现这个情况和value的值变不变是没关系的。
我把楼主的swap方法的形参名字改了一下:
publicclassDemo2_5{
publicstaticvoidmain(String[]args){
Integera=newInteger(1);
Integerb=newInteger(2);
swap(a,b);
System.out.println("a="+a+"b="+b);
}
publicstaticvoidswap(Integeraa,Integerbb){
Integertemp=aa;
aa=bb;
bb=temp;
}
}
以上的改动是对源程序没有任何影响的!!!
你在下意识地把主方法的a和swap方法的a当作同一个对象。
我又看了一下源码,Integer中的value是私有的,而且也没有提供setter方法,所以对它的值是没有办法修改的,也就是没有方法使用a.value=123或者a.setter(123)去改变它的值,而且swap方法中的引用a只是main方法中主方法的复制,所以对于a=b之类的操作都只是改变了a的复制引用的值,而不是原本a,而Integer由于它的value是私有,而且没有setter方法,所以就没法改变Integer的值
不知道这样理解是否正确
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
和其他对象一样,是引用传递没错,是你的swap程序写的有问题,本来引用传递就是传地址,你用局部变量不断改变地址,但却没有改变原地址指向对象的值。
swap方法结束后,局部变量都变没,原来的地址的东西还没变。
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
引用4楼stacksoverflow的回复:
和其他对象一样,是引用传递没错,是你的swap程序写的有问题,本来引用传递就是传地址,你用局部变量不断改变地址,但却没有改变原地址指向对象的值。
swap方法结束后,局部变量都变没,原来的地址的东西还没变。
谢谢解答
这个代码是我在一篇文章上看到的,但是它抛出了一个问题“Integer是封装类型,也就是对象,为什么在参数传递时任然时值传递而不是引用传递呢”
当时看到后感觉不知道怎么解释这个问题了
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
引用3楼qq_33371372的回复:
Quote: 引用2楼DoNotKnowYou的回复:
我补充下我楼上的回答,楼上说的有个地方不对:出现这个情况和value的值变不变是没关系的。
我把楼主的swap方法的形参名字改了一下:
publicclassDemo2_5{
publicstaticvoidmain(String[]args){
Integera=newInteger(1);
Integerb=newInteger(2);
swap(a,b);
System.out.println("a="+a+"b="+b);
}
publicstaticvoidswap(Integeraa,Integerbb){
Integertemp=aa;
aa=bb;
bb=temp;
}
}
以上的改动是对源程序没有任何影响的!!!
你在下意识地把主方法的a和swap方法的a当作同一个对象。
我又看了一下源码,Integer中的value是私有的,而且也没有提供setter方法,所以对它的值是没有办法修改的,也就是没有方法使用a.value=123或者a.setter(123)去改变它的值,而且swap方法中的引用a只是main方法中主方法的复制,所以对于a=b之类的操作都只是改变了a的复制引用的值,而不是原本a,而Integer由于它的value是私有,而且没有setter方法,所以就没法改变Integer的值
不知道这样理解是否正确
这样理解是没问题,但是这个程序里主要是因为你根本没有想去改指向对象的值,而是直接把main传给你的地址给替换掉,然后关起门来自己和自己玩,换来换去对原来mian方法中的参数没有任何的影响。
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
看Integer源码才会明白
Interger有个cache[]缓冲保存128数字。
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
严格来讲,java中没有真正的类似于指针的东西,swap方法中的形参a,b可以看做对主方法中a,b的引用拷贝,你直接对a,b操作是无效的,只有对操作对象中的元素时才会对原参数产生影响
回复
使用道具
举报
千问
|
2021-1-27 06:48:26
|
显示全部楼层
2楼的对引用传递的理解有偏差,要是按照2楼的说法,输出结果是3,可结果是0
publicvoidchange(intc[]){
c[2]=0;
}
@Test
publicvoidshow(){
inta[]={1,2,3,4,5};
change(a);
System.out.println(a[2]);
}
引用传递传过去的是地址,c[2]修改之后,因为a数组也指向那个地址,所以说a[2]也会改变
至于说interge是对象,不是基本类型,应该是引用传递。但是嘞,java机制中传参的时候,自动把interge拆箱为int,也就是基本类型,所以interge这样做的结果,和值传递一样。还有string类型也比较特殊,也不是基本数据类型,按说是引用传递,但它也是和值传递的结果一样。
回复
使用道具
举报
1
2
/ 2 页
下一页
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行
1
风寒感冒怎样治疗,能不能打针
2
月经推迟三天用验孕棒可以排除怀孕吗?
3
产后胸部变小松弛干瘪
4
双腿部内侧有很多红斑点
5
左膝右侧下方按着痛,有时候活动也有点
6
睾丸脱皮还疙手,是个什么问题
7
左侧脖子突然长两个淋巴结,不痛不痒
8
肛门上方长了一个软包
9
眼皮用双眼皮胶卸妆太用力破了肿了
10
女生24岁肚皮上褐色斑点越来越多
11
冬天手冻得开裂了请问一下怎么办
12
右手臂标记处发青疼痛,
13
和男朋友第一次之后,处女膜破裂,阴道口痛痛的
14
阴道和肛门之间有一个小包
15
手指屈伸痛,手背肿痛什么原因
16
甲下好像有脓,需要拔指甲吗
17
我十五岁,每天手淫,感觉记忆力远远不如以前了
18
我这是不是紫癜晚上突然看到的
19
跟男朋友有性生活的心理障碍
20
睾丸右侧长一个疙瘩,不疼不痒
21
屁股沟潮湿红肿像水泡瘙痒疼痛
22
最近皮肤长了很多一小块的又不是很痒
23
宝宝脸冻了起了好多红疙瘩怎么办
24
鼻子旁边起了一个大包。
25
疤痕修复需要多久呢,需不需要动手术
26
手背上不知道起了什么反应
27
大姨妈推迟了好几天都没来
28
你好请问这种是疣体吗。。疣体会生长在什么部位。
29
马上要去做宫颈癌筛查了想问一下白带
30
前两天感冒了,现在睡觉呼吸有声音
31
宝宝今天下午坐车晕车到现在都不停的吐
32
怎么喝猴耳环消炎颗粒
33
身上长出红点红斑,每天都很痒很难受
34
怎么回事,这是,静脉曲张吗?
35
肚子胀、痛觉得恶心有点晕有点想吐
36
比基尼脱毛后,很黑怎么办
37
我怀疑我黄曲霉素中毒
38
最近手淫过度再次手淫事射不出来了15岁
39
转圈圈会昏,肾上腺素飙升,会昏出现幻觉。恶心。
40
宝宝前几天发烧了!我想给他吃点乳铁蛋白
41
手上不知道是什么原因导致
42
肠胃适胶囊和舒肠止泻片有什么区别,可以一起吃吗
43
请问打了乙肝疫苗可以立即去核酸检测吗?
44
姨妈结束后吃了避孕药过了一周又来姨妈了
45
太阳穴长痘用手和粉刺针挤破后变大了
46
孩子感冒,恶心,吐,咨询用药
47
请问一下,碱水烧到手怎么办呢?
48
大脚趾甲盖还连一点点就要掉了
49
一到晚上就有身上一块一块的东西,特别特别特别痒
50
胸口出现不固定位置的绞痛
51
我爱人龟头炎用什么膏药能管用呢
52
耳朵周边一个小疙瘩,不疼不痒
53
牙疼持续好几天了不知道是怎么回事
54
婴儿一放屁就哭闹喂奶也不吃
55
突然整个人昏沉沉的不知道怎么回事
56
手淫产生了一些心里情绪
57
痔疮手术后。发现肛门口有个肉
58
阴囊潮湿怎么治疗会好点
59
做了双眼皮恢复一个月了
60
请问哪个时间段受孕几率大呢?
61
脸部上火,咳嗽,嗓子不舒服
62
肾虚吃中药期间能吃六味地黄丸吗
63
不知道是不是家里猫抓的,已经过了24小时了,如果话
64
高危6周后突然嗓子疼
65
莫名的烦躁,不开心,心情压抑
66
胸部停止发育,发育不良
67
阴道口疼怎么回事?尿完擦拭的时候阴道口疼
68
耳朵一支响伴随长期感冒
69
睡觉不好,快醒时脑子混乱,醒的早
70
破处以后来姨妈了,这个月没有来
71
脖子和胸膛发红还痒怎么办
72
一到冬天我的手就龟裂,疼的要死
73
孩子撞窗台板上脸肿了,口里有血腥味,不吃东西,
74
今天阴茎上起了一个痘痘,
75
手上起了很痒的小包比较密集
76
鼻炎目前在吃药,但是有淋巴结未消
77
宝宝夜晚睡觉总醒来哭闹
78
乙肝妈妈分娩过程宝宝喝入羊水
79
男童睾丸袋子很紧,会不会影响他以后生殖
80
宝宝今天晚上莫名发烧
81
排卵期1分钟左右才戴套,吃了避孕药
82
一到秋至冬季的时候,皮肤就骚痒特难受
83
阴道出现白豆腐渣分泌物怎么办
84
智齿旁边长出类似息肉的东西
85
慢性丙型病毒性肝炎肝硬化
86
乳房涨挤不出感觉里面起块
87
宝宝不吃奶,十几个钟都不吃
88
今晚睡觉不是很舒服,浑身不舒服
89
请问各位医生,为什么我老是肚子疼呢?
90
颈椎生理曲度变直,C5/6椎间盘向后轻度突出
91
脸部两边有斑怎么才能祛掉
92
左侧下颚起了个痘痘,红肿,非常疼
93
清宫手术以后想吐,是怀孕了吗?
94
我的腿上结痂脱落了,可以盖被子吗。
95
深夜咳到干呕没法睡觉怎么办?
96
生殖器以及睾丸比同龄人小
97
小腿有红斑很痒,有一个星期了
98
宝宝为什么跪地上说摔倒了痛哭着要抱?
99
我最近感觉自己好像不太好