感谢,,还有这个:compareTocompareTo和equals有什么区别??感谢
解决方案 »
- 我new了个对象然后 我把值也设到到对象里面去了 添加到list 里面去 然后list遍历出来 我怎么把遍历出来的 那个对象的属性的值取出来 呢?
- java开发企业内部邮箱?
- stat.execute("CREATE DATABASE TEST"); 这句的异常怎么捕捉?
- 用tomcat5.0数据库连接池的一个问题
- 请大家帮忙推荐初学java的书
- 急!!! 如何在一个 jar文件中访问另一个 jar文件中的类? 程序应该如何写.
- Java最基本的问题--路径问题,请帮忙解答一下
- 不知道有没有中文版的java tips?如果没有我准备翻译一下!
- jbuilder6如何配置jndi
- jbuilder7问题
- 为什么此程序死循环?
- 关于搜索指定字符的问题
一般equals方法是判断同一类的两个对象是否有相同值的属性
比如string1.equals(string2)在这个例子中:还需要覆盖父类(Object)的equals方法,你可以自己写写试试
import java.util.*;
import java.io.*;public class Student implements Comparable{
private String name ="";
private double score = 0;
public Student (String name, double score){
this.name = name;
this.score = score;
}
public String getName(){
return name;
}
public double getScore(){
return score;
}
public int compareTo(Object o1){
Student s1 = (Student)o1;
if ( this.score > s1.getScore() ) return 1;
if ( this.score < s1.getScore() ) return -1;
return 0;
}
public static void main(String[] args){
Vector stuVector = new Vector();
try
{
BufferedReader in =
new BufferedReader(
new InputStreamReader(System.in));
Student s;
String s1="";
String s2="";
System.out.println("Please input the 5 students' name and score!");
for (int i=0; i<5; i++){
s1 = in.readLine() ;
s2 = in.readLine() ;
s = new Student(s1, Double.valueOf(s2).doubleValue());
stuVector.add(s);
System.out.println(" a student added! name:"+ s1 + " score:"+s2);
} }
catch(Exception e)
{
e.printStackTrace();
}
Collections.sort(stuVector);
System.out.println("The ordered Student name:");
for(int i = 0;i<stuVector.size();i++){
Student s = (Student)stuVector.get(i);
System.out.println(" " + s.getName());
}
//System.in.read();
}
}
3.1.5 关系运算符
关系运算符生成的是一个“布尔”(Boolean)结果。它们评价的是运算对象值之间的关系。若关系是真实的,关系表达式会生成true(真);若关系不真实,则生成false(假)。关系运算符包括小于(<)、大于(>)、小于或等于(<=)、大于或等于(>=)、等于(==)以及不等于(!=)。等于和不等于适用于所有内建的数据类型,但其他比较不适用于boolean类型。1. 检查对象是否相等
关系运算符==和!=也适用于所有对象,但它们的含义通常会使初涉Java领域的人找不到北。下面是一个例子:
//: Equivalence.javapublic class Equivalence {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
} ///:~其中,表达式System.out.println(n1 == n2)可打印出内部的布尔比较结果。一般人都会认为输出结果肯定先是true,再是false,因为两个Integer对象都是相同的。但尽管对象的内容相同,句柄却是不同的,而==和!=比较的正好就是对象句柄。所以输出结果实际上先是false,再是true。这自然会使第一次接触的人感到惊奇。
若想对比两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“主类型”,那些类型直接使用==和!=即可。下面举例说明如何使用:
//: EqualsMethod.javapublic class EqualsMethod {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1.equals(n2));
}
} ///:~正如我们预计的那样,此时得到的结果是true。但事情并未到此结束!假设您创建了自己的类,就象下面这样:
//: EqualsMethod2.javaclass Value {
int i;
}public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
} ///:~此时的结果又变回了false!这是由于equals()的默认行为是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希望的行为。不幸的是,要到第7章才会学习如何改变行为。但要注意equals()的这种行为方式同时或许能够避免一些“灾难”性的事件。
大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄。
http://community.csdn.net/Expert/topic/4405/4405415.xml?temp=.6695825