java学习中遇到一些题不会解,求大神教教

gy18844059841 2017-04-06 08:20:09
class D{
public static void main(String[] args){
int d = 21;
Dec dec = new Dec();
dec.decrement(d);
System.out.println(d);
}
}
class Dec{
public void decrement(int decMe){
decMe = decMe-1;
}
}


运行结果:输出的是21,为什么不是20.
...全文
889 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
verphan 2017-08-14
  • 打赏
  • 举报
回复
java没有类似c++引用的东西吗,能不能new一个integer传进去,修改的结果自动更新到外边啊
小牛毛 2017-08-14
  • 打赏
  • 举报
回复
还是看上面大神解释!
窝 窝 2017-08-14
  • 打赏
  • 举报
回复
Edison_LSF 2017-08-11
  • 打赏
  • 举报
回复
System.out.println(d); 为什么要输出d呢
  • 打赏
  • 举报
回复
建议你先去理解下堆和栈。还有javase的必学基础,网上搜javase基础。。有好的博客文章
qq_19979481 2017-08-10
  • 打赏
  • 举报
回复
首先是没有返回值 其次是 new一个对象 就开辟一个内存空间 调用的地方和new一个对象 在内存方面不是一个地方 所以说你-1仅仅是new的那个对象变量值-1 调用的地方还是不变的 下面代码是我改的 没测试 应该差不多 class D{ public static void main(String[] args){ int d = 21; Dec dec = new Dec(); d=dec.decrement(d); System.out.println(d); } } class Dec{ public int decrement(int decMe){ return decMe-1; } }
  • 打赏
  • 举报
回复
第一:你传过去的D是给实例用的 第二:你调用的方法没用返回值 第三:你打印的依旧是原来的那个D, 因为你只是将int类型变量D的值传给了new出来的实例使用,不影响原来那个D, 然而变量D本身是没有改变的。 就相当于你有100块钱,朋友找你借100块钱打牌输了1块钱, 但是朋友输了是朋友的事,他的100块依旧得还你。 你100块钱的资产是不会因为你朋友输钱而改变的。
老大佬王 2017-08-10
  • 打赏
  • 举报
回复
一、因为你声明了int d = 21,所以就输出了21。 二、decrement一定要传回来才能用的啊。 我改进的:
public class D {
	public static void main(String[] args) {
		int d = 21;
		int s;
		Dec dec = new Dec();
		s = dec.decrement(d);	
		System.out.println(s);
	}
}

class Dec {
	public int decrement(int decMe) {
		decMe = decMe - 1;
		return decMe;
	}
}
IT_badboys 2017-08-10
  • 打赏
  • 举报
回复
class D{ public static void main(String[] args){ int d = 21; Dec dec = new Dec(); dec.decrement(d); } } class Dec{ public void decrement(int decMe){ decMe = decMe-1; System.out.println(decMe); } } }你试试这个呢 这个输出值才是20吧 你那个方法只是去吧d减1再赋值给decMe,但最终没有返回给主函数 ,所以你输出的还是你一开始定义的d
qq_36344527 2017-04-15
  • 打赏
  • 举报
回复
this.decMe=decMe;就好了,自己定义的人decMe系统分不清是那个,
ArcherCoder 2017-04-10
  • 打赏
  • 举报
回复
第一
你要明白变量的作用域
第二
你要明白静态内存
第三
你要明白动态内存
第四
你要明白动态内存可以跨函数使用
从不卖萌o 2017-04-10
  • 打赏
  • 举报
回复
int d = 21;
Dec dec = new Dec();
dec.decrement(d);
System.out.println(d);

你调用的方法和你输出的值无关。输出的仍然是d的值 所以是21
China小嘿 2017-04-06
  • 打赏
  • 举报
回复
因为你在decrement方法中更改了入参但是没有返回值 所以decrement弹栈后栈内的局部变量decMe也就被回收了
「已注销」 2017-04-06
  • 打赏
  • 举报
回复
或者返回一会decme
「已注销」 2017-04-06
  • 打赏
  • 举报
回复
为什么不输出decme
gy18844059841 2017-04-06
  • 打赏
  • 举报
回复
和c中形参值传递不改变实参的值,只有地址传递才改变其中的内容,是这个道理吗
李德胜1995 2017-04-06
  • 打赏
  • 举报
回复
基本类型的值传递是数值的拷贝,方法里面如何操作影响不到原来int d = 21的值
gy18844059841 2017-04-06
  • 打赏
  • 举报
回复
希望牛人们给我详细介绍下,要详细,谢谢

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧