新手又来提问,三个简单的问题
int i=10;
System.out.println((float)i);
这里的(float)i是永远把i转换成float类型还是只是这个时候转换? 我自己测试了一下,应该是暂时转换 不过 吃不准,就上来问问。
另一个问题
书上写到静态方法里的方法也一定要是静态的才可以
可是为什么main方法里可以调用对象的非静态方法?
最后一个。关于equals的问题
class Employee {
int age;
String name;
Employee(int age,String name)
{
this.age=age;
this.name=name;
}
public static void main(String args[])
{
Employee a=new Employee(1, "aaaa ");
a b=new a(2, "bbbb ");
System.out.println(a.equals(b)); //这里 ,我想知道这里到底比的是什么?难道是这两个对象里的两个成员分别相比么?
}
}
class a
{
int nianling;
String xingming;
a(int nianling,String xingming)
{
this.nianling=nianling;
this.xingming=xingming;
}
}
------解决方案--------------------第一个问题
是暂时转换
第二个问题
静态方法里一定要调用静态方法
main()方法中生成其他类的对象后,就可以调用对象的非静态方法
第三个不太明白,应该是吧
------解决方案--------------------对于第三个问题:Object类中的equals方法用于测试某个对象是否同另一个对象相等。它在Object类中实现的是判断两个对象是否指向同一块内存区域。......如果想测试对象是否相等,就需要覆盖equals方法,进行更有意义的比较。(core java 6th edition)
所以,lz的equals方法并没有覆盖Object类中的equals方法,所以只是对两个对象进行了内存的比较,所以总是为false。
------解决方案--------------------int i = 10;
System.out.println((float)i);=====>这只是一个暂时的转换,
int i =10;
float a = (float)i;=====>这里只是把i转换成float,但是i本身的值并没变.
如果在你自己写类里面有一个静态方法,那么这个静态方法不可以返回实例域的成员,
也就是:private int a ;
public static final int a = 10;
public static int getA(){
return a;========>着是错误的,如果把static去掉,就可以返回了.如果在实例域里面有一个静态成员,如上的静态方法.那么这样写,就成立.否则就错误.
}
至于main方法,它本身就是一个静态方法,所以他可以通过类的名称来直接调用这个方法,如:
public static void main(String[] args){
自己定义的一个类 <===Test.getA();======> 就当上面的getA()方法是静态的,那么这里就可以这样调用了,如果他没有写static,那么必须这样调用.如下:
Test a = new Test();
a.getA();
}
equals方法,平时你写equals的时候,那是基础类库里面的,他们所对应的都是那些类,比如String类里面有equals方法,他只能比较两个字符是否相等.
然后,你的equals方法是继承与Object类的equals方法,Object是所有类的超级类,也就是说,你自定义的类,都是继承了这个类而来的,他里面的equals是这样写的,
public boolean equals(Object other){
this == other;
}
在==号.在JAVA对象里面,所表示的对象是否指向同一个地方.所以不能用Object类的equals方法来判断你自己定义的类,这样就必须要重写equals方法了,假如你写个类.