求助一个问题?

public class MyKeyTest {

int a;
int b;
public MyKeyTest(int a,int b)
{
this.a = a;
this.b =b;
}

public static void main(String[] args) {
// TODO: Add your code here
MyKeyTest mkt = new MyKeyTest(5,4);
System.out.println(mkt);
}
}
//我是一个初学者,对于上边这个程序,打出的结果是MyKeyTest@ad3ba4,
我打印的是一个对像。就是上边这个,
我不理解是什么意思,请大侠帮忙。
[419 byte] By [JAVA3VB] at [2008-4-11]
# 1
打印对象就是这样的,前面是对象的类型,后面的是他的id号。。。。
qiyadeng-。。。。。 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 2
如果你没有重写 这个类的toString() 方法

没人就会打印出

类名@内存地址 即 : MyKeyTest@ad3ba4

# 3
MyKeyTest mkt = new MyKeyTest(5,4);
String aa = mkt.toString();
System.out.println(aa);

和你的效果一样!
cocogg at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 4
public class MyKeyTest {

int a;
int b;
public MyKeyTest(int a,int b)
{
this.a = a;
this.b =b;
}
public String toString()
{
return "hello world";
}

public static void main(String[] args) {
// TODO: Add your code here
MyKeyTest mkt = new MyKeyTest(5,4);
System.out.println(mkt);
}
}
cocogg at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 5
MyKeyTest 的基类是隐含的 Object.class
如果在MyKeyTest 没有覆盖toString方法, 那么
System.out.println(mkt);
调用的是mkt.toString()方法 ,也就是Object toString()方法
//Object中toString()方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
waterborn-WaterBorn at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 6
楼上正解
kyo324 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 7
waterborn(WaterBorn
MyKeyTest 的基类是隐含的 Object.class
如果在MyKeyTest 没有覆盖toString方法, 那么
System.out.println(mkt);
调用的是mkt.toString()方法 ,也就是Object toString()方法
//Object中toString()方法
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

楼上正解

Kinde at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 8
前面几位已经说的很清楚了,小弟来补充一点,楼主你把程序改成下面的样子,即复盖基类的toString()方法:
public class MyKeyTest
{int a,b;

public MyKeyTest(int a,int b)
{
this.a = a;this.b =b;
}
public String toString()
{return ""a+","+b;}
public static void main(String[] args) {
MyKeyTest mkt = new MyKeyTest(5,4);
System.out.println(mkt);
}
}
程序运行到System.out.println(mkt)时会自动去调用mkt所在类的toString()方法,如果这个类中没有重写这个方法,就直接调用Object类的toString()方法
gseah at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 9
基本这个问题楼上几位都已经说得很清楚了,这是初学者容易迷惑的地方,这也是java的一个特色吧。
ldg_2-绿豆糕 at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 10
上面都讲的差不多了,MyKeyTest@ad3ba4其实ad3ba4这一部分是那个对象的hashcode,看看Object的toString()和hashCode()源代码就明白了
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
public native int hashCode();
这里hashCode()方法是native的表明这个方法是c++实现的,我认为用c++实现有几点原因,首先hashCode的生成存在效率问题,即哈希算法的选择和哈希冲突的解决问题,所以选用c++实现来提高效率,还有一点java不是完全开源,哈希算法对用户保密,其次sun公司提供的是jdk的规范,和自己的一个实现,jdk可以由其他厂商来实现,常见的jdk有weblogic公司的,ibm公司的。。这些jdk在j2ee中会遇到
HHCTO-HHCTO at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 11
加个toString方法:
public String toString() {
return this.a+","+this.b;
}
J2EEBird at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...
# 12
怎么还没有揭帖!
cocogg at 2007-10-24 > top of Msdn China Tech,Java,J2SE,基础类...