A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马-刘心武 于 2012-9-6 16:56 编辑

class Demo1
{
public static void main(String[] args)
{
  int a=10;
  change(a);
  System.out.println(a);
}
public static int change(int a){
  a=100;
  return a;  
}
}
打印结果为什么是10,而不是100?
  
class Demo1
{
public static void main(String[] args){
  int[] arr= new int[2];
  arr[0] = 10;
  System.out.println(arr[0]);
}
public static void change(int[] arr){
  arr[0]=100;
}
}
打印的结果是100.

这两道题为什么结果不一样啊?能不能解释一下啊

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
本帖最后由 武庆东 于 2012-9-6 15:39 编辑


class Demo1
{
public static void main(String[] args)
{
  int a=10;
  change(a);
  System.out.println(a);
}
public static int change(int a){
  a=100;
  return a;  
}
}
打印结果为什么是10,而不是100?
解释:public static ing change(int a){
   a=100;
  return a;   
}//这个方法的含义是:将参数传递过来了int 数据自动向上进行转型Integer,将100地址给新的引用变量a,最后返回传递过来的地址对应的数据100!但是主方法中a对应常量池中的10没有改变所以还是10
  
class Demo1
{
public static void main(String[] args){
  int[] arr= new int[2];
  arr[0] = 10;
  System.out.println(arr[0]);
}
public static void change(int[] arr){
  arr[0]=100;
}
}
打印的结果是100.
//打印结果应该是10而不是100,主方法中main()至始至终都没有调用change(int[] arr)方法,并且该静态代码块change(int[] arr)在类初始化时就已经运行完

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
int a在main方法中只是一个局部变量,你将a作为参数传递给change方法,a在change方法中也是作为局部变量存在的,你在change中改变了a的值是不会影响到main方法中的a的。所以main方法输出的a还是10.如果你直接输出change(a),结果就会得到100.
System.out.println(change(a));
回复 使用道具 举报
本帖最后由 刘学 于 2012-9-6 15:39 编辑

class Demo1
{
public static void main(String[] args)
{
  int a=10;      //局部变量a
  change(a);
  System.out.println(a);    //这里输出的是蓝色a的值,上面调用change(a);方法改变的是change(int a)方法内的局部变量,根本就没改变蓝色的a变量。
}
public static int change(int a){
  a=100;         //change(int a)内部的局部变量,是不会影响外部a的变量值的
  return a;  
}
}

class Demo1
{
public static void main(String[] args){
  int[] arr= new int[2];
  arr[0] = 10;   
  System.out.println(arr[0]);
}
public static void change(int[] arr){
  arr[0]=100;    //而这里改变的是绿色部分的初始值,所以输出的是100 ,建议理解一下局部变量和全局变量
}
}
打印的结果是100.

//基本数据类型调用方法与数组调用方法没什么关系,而是作用域问题

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
class Demo1
{
public static void main(String[] args)
{
  int a=10; //这里是实际参数a。
  change(a);//把a传进来相当于把实际参数a=10赋给了形式参数a。
  System.out.println(a);//上面那一句不要,写成System.out.println(change(a));或者int b=change(a);System.out.println(b);
}
public static int change(int a){//这里的a是形式参数,只是一个形式,还不代表具体的值。
  a=100;//这里是对形式参数a的赋值。
  return a;  //返回的是形式参数a的值,也就是100。
}
}
打印结果为什么是10,而不是100?
  
class Demo1
{
public static void main(String[] args){
  int[] arr= new int[2];
  arr[0] = 10;//这里是实际参数。
  change(arr[0]);//这里传的是地址,不是具体的值。
  System.out.println(arr[0]);//输出100。
}
public static void change(int[] arr){//这里是形式参数。
  arr[0]=100;//这里是给实际参数arr[0]赋值。
}
}

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
吕书凯 发表于 2012-9-6 15:08
class Demo1
{
public static void main(String[] args)

第二个的运行结果,打印的是10而非100
回复 使用道具 举报
孙岳 发表于 2012-9-6 15:33
class Demo1
{
public static void main(String[] args)

第二个的运行结果,打印的是10而非100
回复 使用道具 举报
刘学 发表于 2012-9-6 15:33
class Demo1
{
public static void main(String[] args)

第二个的运行结果,打印的是10而非100
回复 使用道具 举报
武庆东 发表于 2012-9-6 15:42
第二个的运行结果,打印的是10而非100

有个小错误,第二个main方法调用change应该是change(arr);而不是change(arr[0]);
输出的是10是因为你没有调用change方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马