动态-JAVA 中Null值到底是什么

问题描述

JAVA 中Null值到底是什么

public class test {

public static void main(String[] args) throws Exception {

Temp temp = new Temp();
temp.test("1");
temp.test(null);
}

}

public class Temp {
public void test(Object a){
System.out.println("test Object");
}
public void test(String a){
System.out.println("test string");
}
}

为什么输出结果为
test Object
test Object

解决方案

输出结果是
test string
test string
null就是代表空对象,在内存中没有占用空间,只占了一个引用空间。

只针对你写的测试例子来将,你的例子更应该是一个overload重载的测试用例。
简单说下重载:jdk重载编译期间就决定了代码的走向,而编译时判断依据就是根据方法中参数类型,以及方法调用者传入的参数,将前者最大程度(Class继承结构)匹配后者的方法,作为编译结果。运行时也将使用次方法。

回到你的问题上,null既然是空对象,那么既可以作为Object (如Object o = null;编译通过),也可以作为String (如String s = null;编译通过)。java.lang.String也是继承的Object类。所以最大程度匹配后,编译器决定执行public void test(String a)方法。

综上,代码test(null)的运行结果为:test string

对重载想要有更深的理解,推荐你查看http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.12.2.10

解决方案二:

运行这段代码输出结果是
test string
test string

时间: 2024-09-28 13:23:19

动态-JAVA 中Null值到底是什么的相关文章

Sql与oracle中null值

  1 null值的介绍 NULL 是数据库中特有的数据类型,当一条记录的某个列为 NULL ,则表示这个列的值是未知的.是不确定的.既然是未知的,就有无数种的可能性.因此, NULL 并不是一个确定的值. 这是 NULL 的由来.也是 NULL 的基础,所有和 NULL 相关的操作的结果都可以从 NULL 的概念推导出来. 2 oracle中的null值介绍 在不知道具体有什么数据的时候,即未知,可以用NULL, 称它为空,ORACLE中,含有空值的表列长度为零.允许任何一种数据类型的字段为空

java数组-JAVA中取值还是会取到重复的

问题描述 JAVA中取值还是会取到重复的 如图中代码,为何还会取到重复的 解决方案 do-while 循环的问题吧 ,=是赋值, == 才是判断相等 while(ss == false) 解决方案二: 而且这个循环的条件应该是while(ss)而不是while(!ss) 解决方案三: 循环条件有点问题. while(ss == false) 解决方案四: =是赋值: == 是值判断:===是属性值都判断:while的判断需要修改 解决方案五: 你的do-while循环里面的,一点作用都没有起到,

java数据-java中键值对数据类型属于引用数据类型吗

问题描述 java中键值对数据类型属于引用数据类型吗 java中键值对数据类型属于引用数据类型吗,可以进行加减乘除操作吗 解决方案 你说像 Map接口的子类?这类引用类型的对象是不能直接进行加减乘除的.能进行加减乘除的只有基本类型和基本类型的包装类.当然如果你Map里放的值是基本类型,比如 Map对象map.put("key",1); 这样的存储你是可以通过 map.get("key") 获取 键值对的值,再对键值对的值进行运算的.但不能对map进行直接运算 解决方

Java中的值传递和引用传递实例介绍_java

复制代码 代码如下: package Object.reference; public class People {     private String name;     private int age;     public People(){     }     public People(String name, int age) {         super();         this.name = name;         this.age = age;     }    

Java中的值传递和引用传递

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?     答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本.指向同一个对象,对象的内容可以在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的. Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言).    

MySQL · 专家投稿 · InnoDB物理行中null值的存储的推断与验证

前言 想写这边文章,是因为之前想写一个解析innodb ibd文件的工具,在写这个工具的过程中,发现逻辑记录转物理记录的转换中,最难的有两部分,一是每行每字段null值占用的字节和存储,二是变长字段占用的字节和存储的格式.本文中重点针对第一种情况. 之前看有关介绍compact行记录格式: 变长字段之后的第二个部分是NULL标志位,该位指示了该行数据中是否有NULL值,有则用1表示.该部分所占字节为1字节 -–<InnoDB存储引擎> 之后便思考是否不管有多少个列都是NULL,该部分都只占1个

SQL 中 NULL值测试代码_MsSql

刚刚想从数据库中的表EXPERT_DETAILS中检索出修改人Modifier(类型 VARCHAR2(20),可为空)为空的那些记录,因为该字段的类型为VARCHAR2(20),我使用的SQL语句为 复制代码 代码如下: select * from expert_details twhere t.modifier = '' 没有检索出一条记录,而这与存储在该表中的记录是不相符的.后来想到即便是空字符型存储在数据库中也应该是NULL而不是''. 然后我使用下列SQL 语句,仍然没有检索出一条记录

SQL 中 NULL值测试代码

刚刚想从数据库中的表EXPERT_DETAILS中检索出修改人Modifier(类型 VARCHAR2(20),可为空)为空的那些记录,因为该字段的类型为VARCHAR2(20),我使用的SQL语句为 复制代码 代码如下: select * from expert_details twhere t.modifier = '' 没有检索出一条记录,而这与存储在该表中的记录是不相符的.后来想到即便是空字符型存储在数据库中也应该是NULL而不是''. 然后我使用下列SQL 语句,仍然没有检索出一条记录

请教各位同仁有关hibernate查询语句中order by中null值的处理,

问题描述 目前有个DAO方法,采用HQL进行查询,最后order by A desc ,但A有空值,由于,后台数据库是oracle,所以采用desc到话,默认null值最大,查询出来的结果排在了最前面,实际需求需要把空值的结果集放在最后.不知道各位有没有遇到类似的问题,帮忙解决一下!先谢谢了 解决方案 最最土的办法:加一个标识列alter table xx add (flags char(1) default '0');update xx set flags = '1' where tt is