亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

測試了一下,用equals和==都能出現相同的結果,老師講錯了么?

public?boolean?equals(Object?obj){
		if(this==obj){
			System.out.print("你好1");
			return?true;
		}
		if(obj==null){
			System.out.print("你好2");
			return?false;
		}	
		if(!(obj?instanceof?subjects)){
			System.out.print("你好3");
			return?false;
		}
		subjects?subject=(subjects)obj;
		if(this.name==null){
			if(subject.name==null){
				System.out.print("你好4");
				return?true;}
			else?return?false;
			
		}else{
			if(this.name==subject.name){
				System.out.print("你好5");
				return?true;}
			else?return?false;
		}

運行結果:

subjectsToList得到一個課程數據:1 語文 王老師

subjectsToList得到一個課程數據:2 數學 劉老師

subjectsToList得到一個課程數據:3 政治 陳老師

取得課程:政治

你好1備選課程中是否包含課程:政治,true

新創建課程:政治

你好5備選課程中是否包含課程:政治,true

你好5備選課程中是否包含課程:語文,true


正在回答

5 回答

package?test;

public?class?Student?{
????String?name;
????
????public?Student(String?name)?{?this.name?=?name;?}
????
????@Override
????public?boolean?equals(Object?obj)?{
????????Student?stu?=?(Student)?obj;
????????if?(this.name==stu.name)?return?true;?//?a
????????//?if?(this.name.equals(stu.name))?return?true;?//?b
????????return?false;
????}
????
????public?static?void?main(String[]?args)?{
????????String?name0?=?"ddd";
????????String?name1?=?"ddd";
????????//?name0?=?new?String("ddd");?//?c
????????//?name1?=?new?String("ddd");?//?d
????????Student?stu0?=?new?Student(name0);
????????Student?stu1?=?new?Student(name1);
????????System.out.println(stu0.equals(stu1));
????}
????/*
?????*?現在簡化模擬了你的寫法,?控制臺會打印true;
?????*?如果解開c,d兩行的注釋,?控制臺會打印false;
?????*?如果注釋a行,?解開b行注釋,?
?????*?則無論c,d兩行是否注釋,?結果都會是true,?
?????*?這也是我們期待的結果,?所以應該使用equals比較字符串.
?????*?為什么會這樣,?去百度"Java字符串池".
?????*/

}


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

慕函數1733451 提問者

非常感謝!
2017-05-18 回復 有任何疑惑可以回復我~
//測試list的contains方法
	??public??void?testContains(){
		subjects?subject=subjectsToList.get(0);
		System.out.println("取得課程:"+subject.name);
		System.out.println("備選課程中是否包含課程:"+subject.name+","+subjectsToList.contains(subject));
		subjects?subject2=new?subjects(subject.id,subject.name,subject.teacher);
		System.out.println("新創建課程:"+subject2.name);
		System.out.println("備選課程中是否包含課程:"+subject2.name+","+subjectsToList.contains(subject2));
		subjects?sub=new?subjects("12","語文","王老師");
		System.out.println("備選課程中是否包含課程:"+sub.name+","+subjectsToList.contains(sub));
	??}
	public?static?void?main(String[]?args){
		ListTest?list=new?ListTest();
		list.subjectsAdd();
		list.testContains();
		/*list.testInt();
		list.listAddArray();
		//list.stringTest();
		list.listAddIdArray();
		list.modifyTest();
		list.addChildSubjects();
		list.testForEach1();*/
		//list.testForEach();
		//list.removeTest();
		//list.removeIdTest();
		//list.removeArray();
	}

這個是部分的!可能你們更想看這個

0 回復 有任何疑惑可以回復我~
import?java.util.ArrayList;
import?java.util.Arrays;
import?java.util.Iterator;
import?java.util.List;


public?class?ListTest?{
	public?List<subjects>?subjectsToList;
	public?ListTest(){
		this.subjectsToList=new?ArrayList();
		this.list=new?ArrayList();
	}
	public?List<Integer>?list;
	//測試添加整型變量
	public?void?testInt(){
		list.add(1);
		System.out.println("基本類型數據必須用包裝類作"+list.get(0));
		
	}
	public?void?subjectsAdd(){
		//為subjectsToList添加數據!
		subjects?ar=new?subjects("1","語文","王老師");
		subjectsToList.add(ar);
		//從subjectsToList中得到一個數據
		subjects?ar1=(subjects)subjectsToList.get(0);
		System.out.println("subjectsToList得到一個課程數據:"+ar1.id+"?"+ar1.name+"?"+ar1.teacher);
	?????ar1=new?subjects("2","數學","劉老師");
	?????//再往subjectsToList中添加一個數據,之前的數據往后推
	????subjectsToList.add(ar1);
	?????ar1=(subjects)subjectsToList.get(1);
		System.out.println("subjectsToList得到一個課程數據:"+ar1.id+"?"+ar1.name+"?"+ar1.teacher);
		ar1=new?subjects("3","政治","陳老師");
		//在指定位置添加數據,該位置上原來的數據往后移動
		subjectsToList.add(0,ar1);
		ar1=(subjects)subjectsToList.get(0);
		System.out.println("subjectsToList得到一個課程數據:"+ar1.id+"?"+ar1.name+"?"+ar1.teacher);
		int?size=subjectsToList.size();
		//遍歷方式一
		/*for(int?i=0;i<size;i++){
			System.out.println("這是List中第"+i+"位的課程信息");
			ar1=(subjects)subjectsToList.get(i);
			System.out.println("課程:"+ar1.id+"?"+ar1.name+"?"+ar1.teacher);
		}
		*/
		//遍歷方式二
		/*Iterator?it=subjectsToList.iterator();
		System.out.println("有如下課程信息:");
		while(it.hasNext()){
			ar1=(subjects)it.next();
			System.out.println("課程:"+ar1.id+"?"+ar1.name+"?"+ar1.teacher);
		}*/
		
		
		
		}
	//遍歷方式三?for?each
	public?void?testForEach(){
			for(Object?ar1:subjectsToList){
				//subjects?ar1=(subjects)obj;
				System.out.println("課程:"+ar1.id+"?"+ar1.name+"?"+ar1.teacher);
			}
	}
	//數組內信息整個添加
	public?void?testForEach1(){
		for(subjects?obj:subjectsToList){
			System.out.println("課程:"+obj.id+"?"+obj.name+"?"+obj.teacher);
		}
	}
	public?void??listAddArray(){
		subjects[]?subject={new?subjects("4","英語","翟老師"),new?subjects("5","地理","魏老師")};
		subjectsToList.addAll(Arrays.asList(subject));
	}
	//添加字符串測試
	/*public?void?stringTest(){
		String?test="I?love?china!";
	????subjectsToList.add(5,test);
	????String?test1=(String)subjectsToList.get(5);
	????System.out.println(test1);
	}
	*/
	//添加數組到指定位置
	public?void?listAddIdArray(){
		subjects[]?subject={new?subjects("6","地理","王老師"),new?subjects("7","社會","劉老師")};
		subjectsToList.addAll(0,?Arrays.asList(subject));
	}
	public?void?modifyTest(){
		subjectsToList.set(2,?new?subjects("h","heike","hhhhh"));
	}
	public?void?removeTest(){
		subjects?move=(subjects)subjectsToList.get(0);
		System.out.println("我即將被刪除,但你刪錯了,我是"+move.name+"?"+move.teacher);
		subjectsToList.remove(move);
		testForEach();
	}
	public?void?removeIdTest(){
		subjectsToList.remove(0);
		System.out.println("我再刪除0號??!");
		testForEach();
	}
	public?void?removeArray(){
		subjects[]?st={(subjects)subjectsToList.get(0),(subjects)subjectsToList.get(1),(subjects)subjectsToList.get(2)};
		subjectsToList.removeAll(Arrays.asList(st));
		System.out.println("這真是大清除呀!!只剩下這些了!");
		testForEach();
	}
	//添加子類對象測試
	public?void?addChildSubjects(){
		childSubjects?child=new?childSubjects("100","兒子來了","媽媽是誰?");
		subjectsToList.add(0,?child);
	}
	//測試list的contains方法
	??public??void?testContains(){
		subjects?subject=subjectsToList.get(0);
		System.out.println("取得課程:"+subject.name);
		System.out.println("備選課程中是否包含課程:"+subject.name+","+subjectsToList.contains(subject));
		subjects?subject2=new?subjects(subject.id,subject.name,subject.teacher);
		System.out.println("新創建課程:"+subject2.name);
		System.out.println("備選課程中是否包含課程:"+subject2.name+","+subjectsToList.contains(subject2));
		subjects?sub=new?subjects("12","語文","王老師");
		System.out.println("備選課程中是否包含課程:"+sub.name+","+subjectsToList.contains(sub));
	??}
	public?static?void?main(String[]?args){
		ListTest?list=new?ListTest();
		list.subjectsAdd();
		list.testContains();
		/*list.testInt();
		list.listAddArray();
		//list.stringTest();
		list.listAddIdArray();
		list.modifyTest();
		list.addChildSubjects();
		list.testForEach1();*/
		//list.testForEach();
		//list.removeTest();
		//list.removeIdTest();
		//list.removeArray();
	}
	
}

這個是完整的!

0 回復 有任何疑惑可以回復我~

親把完整代碼貼出來吧,看看。如果用==就可以的話就沒必要重寫equals方法了,this.name是String型的,一般是比較其值是否相等,用equals

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

慕函數1733451 提問者

已經把代碼貼出來了!
2017-04-13 回復 有任何疑惑可以回復我~
#2

慕函數1733451 提問者

代碼貼出來了,大神怎么不看呢?
2017-04-18 回復 有任何疑惑可以回復我~

把你的主方法main()里的代碼貼出來看看

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

慕函數1733451 提問者

貼出來了,在后面
2017-04-13 回復 有任何疑惑可以回復我~
#2

慕函數1733451 提問者

代碼貼出來了,大神怎么不看呢?
2017-04-18 回復 有任何疑惑可以回復我~
#3

ziom 回復 慕函數1733451 提問者

不好意思,當時看到你貼出來的代碼長就打算過會再看的,結果忘了,樓下說的對,對于字符串的比較應該用equals,你用的==。其他的問題暫時沒看出來
2017-04-18 回復 有任何疑惑可以回復我~
#4

慕函數1733451 提問者 回復 ziom

我也測試了一下,確實==比較的應該是地址,可是在這里用等號竟然能夠不出現問題,也是奇怪了!我除了貼了一個長的,還貼了一個短的,可以看那個短的呀
2017-04-18 回復 有任何疑惑可以回復我~
#5

慕函數1733451 提問者 回復 ziom

話說,老師在這里已經重新寫了equals方法了,那調用equals方法是調用的哪個equals方法呢?難道就是我們重寫的這個?還是string類中的呢?
2017-04-18 回復 有任何疑惑可以回復我~
#6

ziom 回復 慕函數1733451 提問者

你使用==測出來的結果一致應該是由于巧合,還是要用equals比較字符串比較規范穩妥,因為Java中的字符串有一個字符串池的概念,舉個栗子,String str0 = "str"; String str1 = "str"; System.out.println(str0==str1);最后會打印出true, 具體的詳細規則你自己去百度了解一下。
2017-04-18 回復 有任何疑惑可以回復我~
#7

ziom 回復 慕函數1733451 提問者

至于是不是因為字符串池的原因,你可以通過傳入new出來的name傳入構造反向驗證,嗯, 如果你了解過字符串池,應該就知道怎么反響驗證了
2017-04-18 回復 有任何疑惑可以回復我~
#8

ziom 回復 慕函數1733451 提問者

String的equals方法會被調用(在重寫的equals里),而我們重寫的也會被調用,不然寫它何用,關于老師的講解視頻,你可以再看一遍,很多模糊的地方在第二遍溫習的時候就會明白了
2017-04-18 回復 有任何疑惑可以回復我~
#9

慕函數1733451 提問者 回復 ziom

能不能在你電腦上也測試一下呀!
2017-04-19 回復 有任何疑惑可以回復我~
#10

ziom 回復 慕函數1733451 提問者

為什么
2017-04-19 回復 有任何疑惑可以回復我~
#11

慕函數1733451 提問者 回復 ziom

我的意思是用==號,而不是equals,我覺得程序如此都是有原因的
2017-04-19 回復 有任何疑惑可以回復我~
#12

ziom 回復 慕函數1733451 提問者

我上面不是解釋了原因嗎
2017-04-19 回復 有任何疑惑可以回復我~
#13

慕函數1733451 提問者 回復 ziom

你使用==測出來的結果一致應該是由于巧合
2017-04-19 回復 有任何疑惑可以回復我~
#14

ziom 回復 慕函數1733451 提問者

- -。。。你誤解我的意思了,我這個巧合指的是由于你的代碼寫成這樣,所以恰好會出現這種情況,不是說程序會有時這樣有時那樣
2017-04-19 回復 有任何疑惑可以回復我~
#15

慕函數1733451 提問者 回復 ziom

你前面的意思我基本上是理解的,我也覺得不可思議,但是問題畢竟還是沒搞明白,我在想你有沒有試過用==號,萬一你用等號也是可以的呢?那是不是說明我們理解的不夠到位!
2017-04-19 回復 有任何疑惑可以回復我~
#16

ziom 回復 慕函數1733451 提問者

等會我給你寫個測試
2017-04-19 回復 有任何疑惑可以回復我~
#17

慕函數1733451 提問者 回復 ziom

謝謝!
2017-04-19 回復 有任何疑惑可以回復我~
查看14條回復

舉報

0/150
提交
取消

測試了一下,用equals和==都能出現相同的結果,老師講錯了么?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號