为了账号安全,请及时绑定邮箱和手机立即绑定

这个样子不是一样比较了数值了么。 他们区别在哪里。 才学JAVA,请多见谅。。

package kings;

public class Animal 
{
 int age=10;//年龄
 public String name;//名称
 public void eat()
 {
  System.out.println("动物具有吃东西的能力(父类)");
 }
 public Animal(){
  System.out.println("Animal执行了\n");
 }

}

public class Dog extends Animal {
 public int age=20;
 public void eat(){
  System.out.println("狗具有吃骨头的能力");
 }
 public Dog(){
  //age = 30;
  System.out.println("Dog执行了");
 }
 public void method(){
  super.eat();
  eat();
 }
  /*@Override
  public String toString() {
   return "Dog [age=" + age + "]";
  }*/
}

public class Initail {

 public static void main(String[] args) {
  // TODO 自动生成的方法存根
  Dog dog = new Dog();
  dog.age=10;
  Dog dog2=new Dog();
  dog2.age=10;
  int a,b;
  a=dog.age;
  b=dog2.age;
  //System.out.println(dog);//对象dog的内存地址,哈希码
  
  //dog.method();
  if(a==b){  //equals的返回值是布尔类型
   System.out.println("两个对象是一样的");
  }else{
   System.out.println("两个对象是不相同的");
  }
  
  
 }

}

这个样子不是一样比较了数值了么。    他们区别在哪里。    才学JAVA,请多见谅。。

正在回答

3 回答

package two;

public class one {
 
 public int  Ming(int i){
   int c =( i-1);
   return c;
  }

 public static void main(String[] args) {
  // TODO 自动生成的方法存根
  int a = 15;
  int b = 15;
  if(a==b)
  {
   System.out.println("两个对象是相等的");
  }else{
   System.out.println("两个对象是不相等的");
  }
  one ming = new one();
  int c=ming.Ming(16);
  if(a==c)
  {
   System.out.println("a等于c     同时a和c值各为   a="+a+"     c="+c);
  }else{
   System.out.println("a不同于c      同时a和c值各为   a="+a+"     c="+c);
  }
   
   
 }

}


0 回复 有任何疑惑可以回复我~
package two;

public class one {
 
 public int  Ming(int i){
   int c = i;
   return i;
  }

 public static void main(String[] args) {
  // TODO 自动生成的方法存根
  int a = 15;
  int b = 15;
  if(a==b)
  {
   System.out.println("两个对象是相等的");
  }else{
   System.out.println("两个对象是不相等的");
  }
  one ming = new one();
  int c=ming.Ming(15);
  if(a==c)
  {
   System.out.println("相同");
  }else{
   System.out.println("不同的");
  }
   
   
 }

}

 因为回复的贴代码不会有这个格式,就贴这里了。                貌似基本类型数据 == 确实是比值的。不是比较内存。 这个代码中可以看出来。    有什么错误麻烦帮忙指正。谢谢。

0 回复 有任何疑惑可以回复我~
#1

Ckeep

比较内存地址的时候其实本质上还是在比较值
2015-08-15 回复 有任何疑惑可以回复我~

int是基本数据类型,==就是比较值

对于对象来说,==和equals()的区别就是

==比较的是对象是否是同一个对象,即本质上比较的是对象的地址

equal()应该是基类Object的方法,默认也是比较地址和==一样,但是子类可以覆盖这个方法(貌似Java不可以重载运算符,不然重载==就可以了),子类覆盖后就可以根据自己的需要实现equal()方法的比较,像String类。他的equal()方法就是比较字符串字面值是否相通,不在是比较是否为同一个对象,地址是否相同了。


PS: 对于基本类型的包装类如Integer等,貌似 == 也是直接比较值的,而不是对象地址

PPS:JAVA有常量池的概念,所以String a = "123"; String b = "123"; 你会发现 a==b 是成立的,但是 String c = new String("123"); a==c 就不成立了

1 回复 有任何疑惑可以回复我~
#1

抽离 提问者

感谢你的细心解答。虽然不是全明白了,但还是比之前明白了很多。谢谢。
2015-08-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

这个样子不是一样比较了数值了么。 他们区别在哪里。 才学JAVA,请多见谅。。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信