import java.util.ArrayList;
import java.util.Scanner;
//定义一个ArrayList集合,存储一批书籍,书籍具有书名、作者、价格三个属性,
//键盘录入一个书名时,显示该书籍的详细信息。(10分)
class Book{
String name;
String author;
double price;
public Book(String name){
this.name = name;
}
public Book(String name,String author,double price){
this.name = name ;
this.author = author;
this.price = price;
}
public boolean equals(Book b){
return this.name==b.name;
}
public String toString(){
return this.name+this.author+this.price;
}
}
class Demo6{
public static void main(String[] args){
String str = null;
ArrayList<Book> list = new ArrayList<Book>();
list.add(new Book("三国演义","罗贯中",53.5));
list.add(new Book("水浒传","施耐庵",54.5));
list.add(new Book("西游记","吴承恩",60));
list.add(new Book("红楼梦","曹雪芹、高鹗",85));
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
str=sc.next();
break;
}
System.out.println(str);
System.out.println(new Book("三国演义","罗贯中",53.5).equals(new Book(str)));
}
}
toString方法重写了没有?
输入:三国演义
输出结果为什么是:
三国演义
false
为什么是false 把最后的str如果改成"三国演义" 就是true了
因为"三国演义"使用不同的字符串形式而造成"三国演义"字符串的内存地址不同,所以不等,你可以加上这个判断,就很明显了
String str1=new String("三国演义");
String str2=new String("三国演义");
System.out.println(new Book(str1,"罗贯中",53.5).equals(new Book(str2)));
public boolean equals(Book b){ return this.name==b.name; }
这个方法里面你比较的是两个字符串的地址 你应该用equals比较 b.name.equals(this.name)
同一个类的两个对象的equals比较,比较的是两个对象的内存引用地址,所以不同,你需要override一下equals方法,比较三个属性值内容是否相等,
相等则返回true,不相等则返回false。