黑马程序员技术交流社区

标题: 毕老师第五天的test有个地方不懂 [打印本页]

作者: Catface    时间: 2015-3-25 14:18
标题: 毕老师第五天的test有个地方不懂
class Demo
{
        public static void main(String[] args)
        {
                int x = 4;
                show(x);
                System.out.println(x);
        }
        public static void show(int x)
        {
                x = 2;
        }
}
结果可否详细说明一下
!谢谢

作者: 艺多不压身丶    时间: 2015-3-25 15:21
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int x = 4;// 定义了一个变量X并初始化值为4
  6.                 show(x);// 调用show方法将X对应的值传给该方法
  7.                 System.out.println(x);// 打印变量X对应的值4
  8.         }
  9.         public static void show(int x)// 该方法没有返回值,并接受一个整数类型。
  10.         {
  11.                 x = 2;// 将引用类型的值更改为2
  12.         }
  13. }
复制代码

作者: lwenz    时间: 2015-3-25 16:50
void 表示的是无返回值;故此处就算调用了show(x)方法,x值的改变也不会返回到main()函数来,输出的依旧是4;若将public static void show (int x) 改为:public static int show (int x){ x = 2; return x;}  即可
作者: hhh233    时间: 2015-3-25 22:09
没返回值嘛
作者: Grady    时间: 2015-3-25 22:32
可以说两个x不是同一个数,因为它们存在不同内存(栈内存--现在你先忽略栈的的存在)中。而show方法里的x在show执行完以后就被系统自动释放了,对main函数里的x没有影响。
作者: 游人醉    时间: 2015-3-25 23:09
学习学习
作者: @G00DMaN    时间: 2015-3-26 00:21
加油加油加油~
作者: Catface    时间: 2015-3-26 19:47
艺多不压身丶 发表于 2015-3-25 15:21

谢谢版主和大家,现在明白了~~
作者: poppy    时间: 2015-4-9 14:06
顶一个
作者: 百思不得解    时间: 2015-4-9 16:44
结果是4。show方法返回值是空,不会改变main方法中变量X的值的。
作者: ws748264    时间: 2015-4-9 17:04
我想楼上已近给了回答
作者: Hksangs    时间: 2015-4-9 18:08
这两个是不同的变量  
作者: 小七28    时间: 2015-4-9 23:51
加油加油加油
作者: 海贼王019    时间: 2015-4-10 00:08
因为这是传递的值,被调用的函数执行完了之后,变量就释放了,而且没有return返回值
作者: ffuujian    时间: 2015-4-10 00:18
不是返回值的问题,考的是参数传递问题。
基本数据类型在栈内存,形式参数的改变对实际参数没有影响。随着方法的结束而释放。
int x = 4;是实际参数,在show(int x)中充当形式参数,所以不管有没有返回值,对其都没影响。随着show的方法结束而结束。
引用数据类型在堆内存,形式参数的改变直接影响实际参数。因为是引用的是位置,改变的是数值。
作者: lrd7512369    时间: 2015-4-10 09:05
把方法中的参数改为y就好理解了
作者: 杨大萌    时间: 2015-4-10 09:29
show函数里面的x是函数范围内的局部变量,超出了函数范围,就会释放,虽然show方法里面给x重新赋值了,可是没有返回值,所以,函数运行结束,就已经被释放了。而主函数内的输出语句打印的是在主函数内有效的x的值,为4.
作者: adalvik    时间: 2015-4-10 09:34
楼主还没 明白 形参 和实参的概念么
作者: lurenge    时间: 2015-4-10 10:54
1,首先要明白,这两个X不是同一个变量。
2,这两个参数存放的位置在同一个地方。
作者: 小鹏_sJQBO    时间: 2015-4-10 11:08
学习了~~~~
作者: 396460221    时间: 2015-4-10 14:01
基本数据类型形参值的改变不会影响实参的值。如果想要改变实参的值就要将运算之后的值再赋给实参才行。
作者: wkz_crystal    时间: 2015-4-10 14:40
本帖最后由 wkz_crystal 于 2015-4-10 14:41 编辑

哥们儿:给你一句话,自己分析就能解决了:局部变量真是作用于函数或者语句中,它存在栈内存中,随着函数或者语句的结束而over,当over时,自然会被释放空间!所以你觉得show方法中的x还存在吗,有意义吗?
作者: 只是忽然间    时间: 2015-4-10 15:04
show(x);这一个方法调用代码,知识x=4的值赋值给了show方法里面的变量x而已,这两个x并不是同一个变量,作用域都不一样,虽然把x赋值为2,也只是改变了show函数中参数x的值(记住基本数据类型的参数类型传参是值传递,两个变量不是指向内存中同一地址块)
作者: 冰心冷恋    时间: 2015-4-10 16:15
学习学习

作者: sisel    时间: 2015-4-10 22:02
由于int是值类型 拷贝传递,所以方法中的x=2并不能影响main中 的x的值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2