当前位置: 首页 > news >正文

东营做网站tt0546/seo标题优化是什么意思

东营做网站tt0546,seo标题优化是什么意思,wordpress 带www,外贸网站优化排名原文链接:http://blog.csdn.net/qq_33290787/article/details/51810529 equals()与 在java编程或系统实际可发中都会用到,但是二者又有实际的区别。千万不要理所当然地认为equals()与的作用就是一样的,下面就一步步来阐述二者的区别。 phone…

原文链接:http://blog.csdn.net/qq_33290787/article/details/51810529

equals()与 == 在java编程或系统实际可发中都会用到,但是二者又有实际的区别。千万不要理所当然地认为equals()与==的作用就是一样的,下面就一步步来阐述二者的区别。


phone.java 
新建phone类,有两个私有的成员变量price与memory,在构造器中对其进行初始化。

package testPackage;public class phone {private float price;//价格private int memory;//内存public phone(float price, int memory) {super();this.price = price;this.memory = memory;}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

testPhone.java 
新建两个手机对象,两个私有成员变量都赋一样值,用equals()进行比较

package testPackage;public class testPhone {public static void main(String[] args){phone p1 = new phone(4000f,16);//4000元,16G内存的手机p1phone p2 = new phone(4000f,16);//4000元,16G内存的手机p2if(p1.equals(p2)){//如果p1等于p2System.out.println("p1与p2相同");}else{//p1不等于p2System.out.println("p1与p2不相同");}}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

运行结果: 
p1与p2不相同

结果分析: 
尽管两个手机对象的私有成员变量全部相同,equals()运行结果显示这两个对象是不相同的。这是为什么呢? 
还有,phone类中并没有定义equals()方法,这个equals()方法哪里来的? 
相信大家都知道java中的所有类都继承了Object.class,因此,所有类都继承了Object类中的equals()方法,要想知道运行结果的本质原因必须查看Object.class的源码。 
打开Object.class的源码找到定义equals()方法的位置:

public boolean equals(Object obj) {return (this == obj);
}
  • 1
  • 2
  • 3

发现Object.class给出equals()方法的定义,竟然只是简单地通过==去实现判断。而==在java中用于判断存储在栈中的值是否相等。我们的基本数据类型像int的比较都用==,因为基本数据类型就存放在栈中,同样存放在栈中的,还有引用数据类型的引用,而真正的对象本身则存放在堆中。因此,这里给出的equals()方法就只是比较两个对象在内存中的引用(即地址)是否相等。本例中新建了两个对象,在内存中就新开辟了两个内存空间,引用地址当然是不一样的,程序运行结果当然是不相同。 
但是我们想通过两个手机的价格与内存相同就判断手机是相同的,确实实际开发中我们都是这样想的,那应该怎么办呢?重写equals()方法。


phone.java中重写equals()方法:

package testPackage;public class phone {private float price;//价格private int memory;//内存public phone(float price, int memory) {super();this.price = price;this.memory = memory;}@Overridepublic boolean equals(Object obj){if(this == obj){//如果引用地址是相同的,证明是同一个对象,那当然相同return true;}if(obj ==null){//如果对象是空的,没有比较的必要,直接返回falsereturn false;}if(!(obj instanceof phone)){//如果obj不是phone的一个对象实例,直接返回falsereturn false;}phone p = (phone)obj;//编译需要,强制类型转换if( this.price==p.price && this.memory==p.memory ){return true;}else{return false;}   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

重新运行testPhone.java,查看运行结果:

运行结果: 
p1与p2相同

结果分析: 
通过重写equals()实现了通过私有成员变量判断两个手机对象是否相等,若prize与memory都相等,则两个手机对象就相等。


看到这里,相信大家对equals()与==的区别都有一定理解了,但是显然还不够,关于二者的区别,还有值得了解的地方。


新建testString.java进行字符串测试

package testPackage;public class testString {public static void main(String[] args){String s1 = "我是手机1";String s2 = new String("我是手机1");System.out.println(s1==s2);System.out.println(s1.equals(s2));}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

运行结果: 
false 
true

结果分析: 
在java中,字符串是引用数据类型,以实例对象的形式存在。因此,虽然s1与s2看上去定义方式不同,但是它们都新建了对象,本质其实是一样的。 
如上所说,==比较的是引用数据类型在栈中的地址是否相同,s1与s2都新建了两个字符串对象,当然开辟了两个不同的内存空间,结果返回false当然是意料之中的。 
但是s1.equals(s2)为什么返回true呢?按上面所说Object.class不也是直接通过==进行判断的吗?结果应该是false吧?这时不妨大胆打开String的源码。

public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

发现String.class给出了对Object.class中equals()方法的重写,重写后equals()要判断两个字符串的字符是否全部相等。 
这是修改一下s2的字符再重新测试:

public static void main(String[] args){String s1 = "我是手机1";String s2 = new String("我是手机2");System.out.println(s1==s2);System.out.println(s1.equals(s2));}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行结果: 
false 
false

结果分析: 
由于s1与s2的字符不完全相同,因此equals()方法返回false


到这里,给出在实际应用中equals()与==的使用技巧:

  1. 若是两个基本数据类型的比较,例如int a = 1,b = 2;比较a是否等于b。使用==
  2. 若要通过比较成员变量判断两个对象是否相等(对象不是字符串),例如自己写的phone对象,要重写从Object类继承来的equals()方法实现。
  3. 若是比较两个字符串,直接用equals()方法。

http://www.jmfq.cn/news/5230369.html

相关文章:

  • 彩票类网站是如何做代理的/seo监控
  • 虎门镇做网站/百度 人工客服
  • 绿色家园网站怎么做/cps广告是什么意思
  • 合肥学校网站建设/seo二级目录
  • wd怎样建设一个网站/我想接app纯注册推广单
  • 凡科做网站真的免费吗/9个广州seo推广神技
  • 长沙 建网站/网站推广seo优化
  • 淮安网站建设哪家好/2022最新国内新闻50条简短
  • 手机app软件开发价格/全网seo是什么意思
  • cms 美容网站 模版/seo 优化顾问
  • 深圳做网站多少/关键词优化策略
  • 网站平台建设属于固定资产吗/互联网运营
  • 提供企业网站建设公司/营销排名seo
  • 开公司怎么做网站/关键词seo服务
  • 重庆便宜网站建设/国际新闻最新消息美国
  • wordpress 5.1/百度搜索seo优化技巧
  • 企业网站建设分析/seo的概念
  • 做网站用c 还是js/临沂今日头条新闻最新
  • 自己可以免费做网站吗/西安疫情最新情况
  • 有没有网站/seo优化主要做什么
  • 如何设计出更好用户体验的网站/seo博客网站
  • 长治网站制作公司/矿坛器材友情交换
  • 武汉网站建设报价明细表/关键词你们懂的
  • 网站建设好后如何连接服务器/360搜索引擎
  • 网站开发流程图/湖南seo优化公司
  • 网站建设规划方案.ppt/汕头seo计费管理
  • 免费做网站建设/海南seo排名优化公司
  • 威宁住房和城乡建设局网站/百度推广服务
  • 网站制作知识/怎样开自己的网站
  • 新手什么网站做外贸/常见的推广平台有哪些