public class Test
{
private void print(Integer some)
{
System.out.println("Integer");
}
private void print(Object some)
{
System.out.println("Object");
}
public static void main(String[] args)
{
Test test = new Test();
test.print(null);
}
}
请说出输出结果.为什么!!!
{
private void print(Integer some)
{
System.out.println("Integer");
}
private void print(Object some)
{
System.out.println("Object");
}
public static void main(String[] args)
{
Test test = new Test();
test.print(null);
}
}
请说出输出结果.为什么!!!
不知道这么说站不站的住脚
它等于4
可见它是个4字节的,这可能要研究他的存储方式了
它等于4
可见它是个4字节的,这可能要研究他的存储方式了
---------
这个不就是"null"有4个字符吗,怎么扯到字节、存储方式上去了
还有,跟c中的0是两码事,这里都是对象
public class test
{
private void print(Object some)
{
System.out.println("Object");
}
private void print(int some)
{
System.out.println("Integer");
}
public static void main(String[] args)
{
test test1 = new test();
test1.print(null);
}
}
纯属个人意见
Integer 作为int的封装类,其初始值是null,而不是0.所以,这里你输入参数null,jvm就会调用与参数匹配间隙最小的方法.所以......
int跟Object没有可比性两者都匹配的时候,涉及到强制转换,选择强制转换后信息丢失最少的那个,所以就选择了Integer
纯属个人意见
/////////////////////////////////////
我也不是很清楚,查了半天没找到,你说是怎么回事呢?
它等于4
可见它是个4字节的,这可能要研究他的存储方式了
---------
这个不就是"null"有4个字符吗,怎么扯到字节、存储方式上去了
////////////////////////////////////////////////////////////////
这就代表null有四个字符?===您的意思是null="null"
也就是
System.out.println((null+"").length());==System.out.println(("null"+"").length());
嗬嗬,我也不清楚,请给讲一下好吗?学习学习
Integer 作为int的封装类,其初始值是null,而不是0.所以,这里你输入参数null,jvm就会调用与参数匹配间隙最小的方法.所以......////////////////////////////////////////
看来得恶补基础了。
给楼主道歉
学到了些东西
谢谢高手指点
{
System.out.println("Integer");
}这个方法去掉,就是Object了,真晕/
在这里,NULL既是Integer的对象,也是Object的对象,而且Integer类继承于Object 类,所以在这种情况下,沿着继承的路线从下往上搜索匹配的情况——fairyskydlj()
我再给你个例子
class Humen
{
}class Women extends Humen
{
}
class Man extends Humen
{
}public class Test
{
private void print(Humen some)
{
System.out.println("Humen");
}
private void print(Man some)
{
System.out.println("Man");
}
public void print(Women some)
{
System.out.println("Women");
}
public static void main(String[] args)
{
Humen hu = new Humen();
Humen hu_shangzhuan = new Man();
Man man = new Man();
Test test = new Test();
test.print(hu);
test.print(hu_shangzhuan);
test.print(man);
test.print(null);
}
}
这段代码在编译期会抱错,说是The method print(Humen) is ambiguous for the type Test
也就是说null既是Man,也是Women的对象。
所以你的结果应该是打印出Integer.
改成String 的时候应该显示的是Integer
还有啊 什么是数据库~ 我一激动答了个:具有关联表的集合 呵呵~ 真的有点丢人,我到今天也不能用很简练的语言概括出到底什么是数据库。
我到网上找到的答案:
数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的。
private void print(Integer some)
{
System.out.println("Integer");
}
去了
结果就会显示为Object
所以,是那个Integer类继承于Object 类,所以在这种情况下,沿着继承的路线从下往上搜索匹配的情况.
应该没有错了
private void print(Object some) {
System.out.println("Object");
} private void print(int some) {
System.out.println("Integer");
}
public static void main(String[] args) { MainTest test1 = new MainTest();
test1.print(null); }
// 结果 object================================
然后,调换print的位置:
private void print(int some) {
System.out.println("Integer");
}
private void print(Object some) {
System.out.println("Object");
} public static void main(String[] args) { MainTest test1 = new MainTest();
test1.print(null); }
// 结果还是object
==============================================无论print的顺序怎样,eclipse都有如下信息
the method print(int) from the type xx is never used locally.
==============================================
原因不明。
public class Test
{ private void print(java.util.List some)
{
System.out.println("Object");
}
private void print(java.util.ArrayList some)
{
System.out.println("Integer");
} public static void main(String[] args)
{
Test test = new Test();
test.print(null);
}
}
说的对,好像在java解惑的那本书里,已经讨论过这个问题,说的原因就是fairyskydlj() 说的那个。
因为int是简单类型,null是对象
public class Test{
private void print(){
System.out.println("helloWorld");
}
private void print(Object some){
System.out.println("Object");
}
private void print(Integer some){
System.out.println("Integer");
}
private void print(String some){
System.out.println("String");
}
public static void main(String[] args){
Test test = new Test();
test.print(null);
//System.out.println((null).length());
}
}
首先说明,它是编译不通过的。
String和Integer都是基本类型的包装类,它们默认的初值是null,当出现一个null的参数时,它就去找它最近的匹配
在这个例子中说明参数匹配是先从子类开始再到父类,Object 是所有类的父类,所以只要有一个别的类的实例,就肯定轮不到它。
但是出现两个没有继承和被继承关系的类中,它们就没有办法匹配了。
本人做了如下实验:
private void print(Object some) {
System.out.println("Object");
} private void print(int some) {
System.out.println("Integer");
}
public static void main(String[] args) { MainTest test1 = new MainTest();
test1.print(null); }
// 结果 object================================
然后,调换print的位置:
private void print(int some) {
System.out.println("Integer");
}
private void print(Object some) {
System.out.println("Object");
} public static void main(String[] args) { MainTest test1 = new MainTest();
test1.print(null); }
// 结果还是object
==============================================无论print的顺序怎样,eclipse都有如下信息
the method print(int) from the type xx is never used locally.
==============================================
原因不明。
出现 the method print(int) from the type xx is never used locally.
并没有什么原因不明的,就是你的print(int)方法没有不你的本地程序所调用
public void print(Object obj){
System.out.println("Object");
}
public void print(Vector v){
System.out.println("Vector");
}
public void print(MyVector v){
System.out.println("MyVector");
} public static void main(String[] args) {
Test test = new Test();
test.print(null);
}}class MyVector extends Vector{
}
->java.lang.Number
->java.lang.Integer
Integer类派生与Object类
当传递的参数null与Integer对象匹配,转成Integer对象,
否则如果没有Integer参数的方法,继续向上转型成Object对象。
(详细请参看java解惑 p106面)
偶以后可能不会用java了 5555555555555555555555555555~~~
还是c和c++好
System.out.println("t");
}
public void print(String t) {
System.out.println("str");
}
public static void main(String[] args) throws UnknownHostException {
Test t= new Test();
t.print(null);
}
}
这样输出的是什么?
null,对象没有实例话。no instance.
在此,将null作为参数,在运行时会动态绑定,向上转型。这也是多态的原理。
在此,null先转化成Integer类的对象。而不会继续向上转型成Object.
至于String,int等数据类型非类,没有封装,所以与封装成对象的没有可比性。null在此可以转型,是一个奇怪的东西。null也是对象。null是所有类的对象,包括你自己定义类的一个未实例化的对象。
null是所有类的对象,包括你自己定义类的一个未实例化的对象。
另外public class Test
{
private void print(Integer some)
{
System.out.println("Integer");
}
private void print(Object some)
{
System.out.println("Object");
}
private void print(a some)
{
System.out.println("a");
}
public static void main(String[] args)
{
Test test = new Test();
test.print(null);
}}
class a{}
出错。把print(object)与print(integer)去掉,运行正常。
说明null是所有类的对象,而Integer与a同时出现出错,是向上转型模糊以上问题总结两点:
1、向上转型
2、null是所有类的对象
1、向上转型
2、null是所有类的对象
private void print(Object some) {
System.out.println("Object");
}
// private void print(Integer some) {
// System.out.println("Integer");
// }
private void print(String some) {
System.out.println("String");
} public static void main(String[] args) { Test test = new Test();
test.print(null);
}}结果:
String我认为:
Top 回复人:blh(股市奋斗几十年,一夜回到解放前: () ( ) 信誉:100 2007-02-04 23:09:46 得分:0
因为Integer是Object的子类,所以等于private void print(Integer some)重载了private void print(Object some),所以调用总是先匹配private void print(Integer some),至于null她是任意类型,所以他既可以是Integer又可以是Oject,但因为前面的原因,null按照Integer处理
总结的太清楚了,把所有的问题点都说清楚了,
一个是继承,一个是重载
-------------------------------------------------
null instanceof String false
null instanceof Integer false
null instanceof Object false
-------------------------------------------------
null 不属于任何类。null 本身就是一个单独的对象
同意重载的说法