javaSe有一个小问题不明白

JavaNewbie__ 2017-06-26 02:36:31





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)));
}

}


输入:三国演义

输出结果为什么是:

三国演义
false

为什么是false 把最后的str如果改成"三国演义" 就是true了
...全文
198 2 打赏 收藏 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
JavaNewbie__ 2017-06-26
  • 打赏
  • 举报
回复
引用 1 楼 LJDargon 的回复:
1、使用str,== 比较两个字符串对象的内存地址,所以不相等。 2、直接写字符串,不引用str,这时地址是一样的。 你使用equals进行比较,这时比较的是值。
感谢 Book类的equals方法的==改成equals就好了
LJDargon 2017-06-26
  • 打赏
  • 举报
回复
1、使用str,== 比较两个字符串对象的内存地址,所以不相等。 2、直接写字符串,不引用str,这时地址是一样的。 你使用equals进行比较,这时比较的是值。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧