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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 方书堂 黑马帝   /  2011-12-5 16:40  /  3140 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 方书堂 于 2011-12-6 09:10 编辑

class Age
{
        private int age;
        String name;
        public void setAge(int a)
        {
                if(a>0 & a<130)
                {
                        age=a;        //改成a=age为什么结果会不一样啊
                        speak();
                       
                }
                else
                        System.out.println("feifa");
        }
        public int getAge()
        {
                return age;
        }
        void speak()
        {
                System.out.println("age="+age);
        }
       
}

class AgeDemo2
{
        public static void main(String[] args)
        {
                Age p=new Age();
                p.setAge(30);
        }
}
为什么把上面的age=a改成a=age结果会不一样啊

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 刘海涛 于 2011-12-5 19:50 编辑

java '='  号是赋值的操作。右边赋给左边
你的目的是要判断a 的值是否符合你的规范。在把a的值赋值给age

正确的是 age = a;
a = age 相当于把刚初始化的值0赋给了a
结果a = 0;

在java里面形参的传递:
1、基础数据类型传递的是值,不会改变原来的值,还有特殊的String对象也一样。
   基础数据类型:整型:byte short int long
     浮点型:float double字符型:char
      逻辑性:boolean(true false)

         

例如:

  1.         public static void setAge(int a) {
  2.                 a = 4;
  3.                 System.out.println(a); //结果a = 4
  4.         }
  5.         public static void main(String[] args) {
  6.                 int a = 5;
  7.                 setAge(a);
  8.                 System.out.println(a); //结果a=5
  9.         }

复制代码
2、对象类型传递是传递对象的引用,操作该对象引用,会改变原来对象的属性。

例如:

  1.    public static void setAge(Age age) {
  2.                 age.setAge(4);
  3.                 System.out.println(age.getAge()); //输出结果为 : 4
  4.         }
  5.        
  6.         public static void main(String[] args) {
  7.                 Age age = new Age();
  8.                 age.setAge(10);
  9.                 setAget(age);
  10.                 System.out.println(age.getAge()); //结果输出为:4
  11.         }
复制代码

评分

参与人数 1技术分 +2 收起 理由
admin + 2 赞一个!

查看全部评分

回复 使用道具 举报
对的“=”是赋值运算符,在java中的意思和数学中的意思是有差别的。
“=”是将等号右边的值赋给等号左边的变量,所以说可以写“a=2”,就是将2赋给a变量,千万不能写“2=a”,这就不对了,不能将变量赋给2这个常量。
另外,“==”这个符号才是和数学中的等号是一样的意思,它是一个比较运算符。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
赋值 x=y;是把y的值赋给x
        y=x;是把x的值赋给y

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
a,age都是变量,=号是赋值操作,右边赋给左边
a=age和age=a当然结果不一样

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
同时你要看到是将形参(a)值用“=”赋值给实际参数(age),你操作的目的是要给类中定义的实参传值,将实参赋给形参没有任何意义。
回复 使用道具 举报
杨银川 黑马帝 2011-12-5 18:41:27
7#
其实也简单,这是一个赋值问题,age=a是把传进来的值a赋值给age,而a=age是把默认值为0的age赋值给了a。
结果当然不一样了。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
武超 黑马帝 2011-12-5 18:45:23
8#
这是将形参局部变量a赋值给成员变量age,使它能够在类中全局使用。
回复 使用道具 举报
赵燕燕 黑马帝 2011-12-6 01:47:46
9#
在java当中,“=”是赋值的意思,将右边的值赋值给左边
a=b;  就是将b的值赋给了a
你的程序中,是要将参数a的值赋值给age了,所以要写成age=a;
如果写成a=age; 就是将年龄的值赋给a了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
杨银川 发表于 2011-12-5 18:41
其实也简单,这是一个赋值问题,age=a是把传进来的值a赋值给age,而a=age是把默认值为0的age赋值给了a。
结 ...

哦,我知道了。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马