Java 中equals和toString()方法重写

1,equals方法

(1)什么时候需要重写?

如果希望不同内存但相同内容的两个对象equals时返回true,则需要重写equals

(2)怎么重写?

class A
{ public int i;
  pulic A(int i)//构造函数
   {this.i=i;
   }
  public boolean equals(Object obj)//重写equals
   {A aa=(A)obj;
    if(this.i==aa.i)
      return true;
    else
     return flase;
   }
}
public class testEquals{
 public staric void main(String[] args){
   A aa1=new A(10);
   A aa2=new A(10);
   System.out.println(aa1.equals(aa2));
 }}

(3)注意问题:

String类系统已经重写equals了,不必再重写;

另外区分equals和==

public class extendsPrivateTest {

public static void main(String[] args){

String str1=new String("China");

String str2=new String("China");

System.out.println(str1.equals(str2));

System.out.println(str1==str2);

String str3="China";

String str4="China";

System.out.println(str3.equals(str4));

System.out.println(str3==str4);  } }

str1和str2放在堆里

true//equals已经被系统重写

false

str3和str4是放在数据区,都是指向一个数据

true

true

2.toString方法

(1)为什么需要重写toString?

Object类中的toString方法返回的是类的名字和该对象的哈希码组成的一个字符串,例,[email protected]

而我们实际想用System.out.printf(类对象名)输出该对象的toStringd()方法返回的字符串不是上述的时,就必须重写toSring方法。

(2)怎么重写toString方法?

注意:为了实际需要,建议子类重写从父类Object继承的toString()方法

class Point{
  private int i,j;
  puvlic Point(int i,int j){
   this.i=i;
   this.j=j;
  }
  public String toString(){
   return "["+i+","+j+"]";
  }
}
public class testtoString{
  public static void main(String[] args){
     Point p1=new Point(1,3);
     System.out.println(p1);
  }
}
时间: 2024-12-31 10:01:50

Java 中equals和toString()方法重写的相关文章

关于java中equals 比较值得方法 和== 及在实际项目中遇到的问题

最近遇到一个比较蛋疼的问题.在外界输入数据 ,文本获取到数据,然后存放到一个数组对象里面. 我利用数组的做循环判断.每当下一个进来的时候都会循环之前的数组,看是否有相同的值.但是有时候第一次是可以比较出来.但是在添加了3个元素之后.在去扫描第一个的值.就会出现第一个的值还是可以添加到数组里面.这个问题让我比较费解.因为之前的循环是判断了的.== 这个是用于-128---127的直接的比较.一般我们操作比较复杂的数据类型都是用equals  .出现的这个问题比较费解.初步估计是equals比较的时

Java中equals和hashcode的区别?

Java中equals和hashcode方法是在Object对象中的,所以每个对象都有这两个方法,大多数时候我们为了实现特定需求需要重写这两个方法 equals和hashcode方法常用在同一个类中用于比较,尤其是在set集合中比较元素是否重复 equals方法返回true的两个对象,hashcode一定相同 hashcode相同的两个对象,equals方法不一定返回true 原文地址:https://www.cnblogs.com/qf123/p/8671141.html

Java中equals与==和comparaTo的区别

一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long double float boolean 2.引用数据类型(也就复合数据类型)除了上面的8个,其他都是引用数据类型 区别: 基本数据类型比较只能用==,不能用equals,因为用equals(参数),参数必须为对象. 他们之间的比较,比较的是他们的值. public class Test { public s

Java中Integer类的方法

字段摘要 static int MAX_VALUE              保持 int 类型的最大值的常量可取的值为 231-1. static int MIN_VALUE              保持 int 类型的最小值的常量可取的值为 -231. static int SIZE              以二进制补码形式表示 int 值的位数. static Class<Integer> TYPE              表示基本类型 int 的 Class 实例. 构造方法摘要

转- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)

package cn.outofmemory.codes.Date; import java.util.Calendar; import java.util.Date; public class CalendarDemo { public static void main(String[] args) { Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); System.out.println("现在时间

关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)(一)

package cn.outofmemory.codes.Date; import java.util.Calendar; import java.util.Date; public class CalendarDemo { public static void main(String[] args) { Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); System.out.println("现在时间

java中equals和==的区别 (转)

java中equals和==的区别  值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中. ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同. equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同.  ==比较的是2个对象的地址,而equals比较的是2个对象的内容. 显然,当equals为true时,==不一定为true: 一.String中

【转】Java中equals和==的区别

[转]Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基类的,

Java中vector的使用方法

Vector的使用 vector类底层数组结构的,它包含可以使用整数索引进行访问的组件.不过,vector的大小可以根据需要增大或缩小,以适应创建vector后进行添加或移除项的操作,因此不需要考虑元素是否越界或者会不会浪费内存的问题. 由vector的iterator和listIterator方法所返回的迭代器是快速失败的:也即是它不能并发执行操作.如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的remove或add方法之外的任何其他方式),则迭代器将抛出ConcurrentM