A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© up.yfei 中级黑马   /  2013-4-28 17:53  /  2042 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 up.yfei 于 2013-4-29 20:20 编辑

如果你写一个方法,方法的返回值是一个对象的话,你可以返回null
如果你定义的方法的返回值是String的话,也可以返回null
  1. import java.util.*;
  2. class  ListDemo1
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 ArrayList al = new ArrayList();

  7.                 al.add("java01");
  8.                 al.add("java02");
  9.                 al.add("java03");
  10.                 al.add("java04");

  11.                 System.out.println(al);

  12.                 al.set(3,null);
  13.                 al.set(2,null);

  14.                 Iterator it = al.iterator();

  15.                 while(it.hasNext())
  16.                 {
  17.                         System.out.println(it.next());
  18.                 }
  19.         }
  20. }
复制代码
[size=-1]boolean
hasNext()
          以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。

这样返回的是


null被输出了,那就是说null 是一个元素了,那么到底算不算对象呢?

null 是不是属于 Object呢?


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
  1. public class Null {

  2. public static void greet() {
  3. System.out.println("Hello World");
  4. }

  5. @SuppressWarnings("static-access")
  6. public static void main(String[] args) {
  7. ((Null) null).greet();
  8. }

  9. }
复制代码
应该不是的...
回复 使用道具 举报
null应该不是对象,
Object obj=null;指的是,obj对象没有指向其他地方,即没有引用地址,当gc运行时,会被回收,释放空间
至于:
“如果你写一个方法,方法的返回值是一个对象的话,你可以返回null
如果你定义的方法的返回值是String的话,也可以返回null”
对象和String本来就是引用类型,给一个实际的内存地址和给一个null地址,并不矛盾

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
null代表没有对象的引用,引用类型都可以为null值,表示没有引用地址,值类型不可以为null值

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

回复 使用道具 举报
null本身虽然能代表一个不确定的对象,但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例。
可以做一个简单的例子:

        //null是对象吗? 属于Object类型吗?
        if (null instanceof java.lang.Object) {
            System.out.println("null属于java.lang.Object类型");
        } else {
            System.out.println("null不属于java.lang.Object类型");
        }

结果会输出:null不属于java.lang.Object类型

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
//null是一个Object对象,再说集合里只能存储对象
//基本数据类型的空值为0;
//对象类型的空值为null
public class Demo07 {
       
        @SuppressWarnings({ "unchecked", "rawtypes" })
                public static void main(String[] args)
        {
                ArrayList al = new ArrayList();

                al.add("java01");
                al.add("java02");
                al.add("java03");
                al.add("java04");
              

                System.out.println(al);

                al.set(3,null);                                                               
                al.set(2,null);

                Iterator it = al.iterator();

                while(it.hasNext())
                {
                        System.out.println(it.next());
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
null不是对象,它没有类型,
至于为什么输出null,你可以这样理解:
void print(Object o)
{
    if(o == null) system.out.print("null");
    else system.out.print(o.toString());
}
——这样当你传入参数null的时候,输出的就是null了

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
null不是对象,也不属于Object类,它是表示在内存中不存在。引用类型的变量都可以赋值为null,表示该引用在内存中没有分配内存。
如果对一个已经赋值了对象的引用变量赋值为null,GC会在下一次垃圾回收时,清理这个对象。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
null是一个值。 另外2个是true和false。
虽然 true 和 false 看上去似乎是个关键字,但是他们在技术上而言是属于布尔的字面值。
类似地,null 看上去也像个关键字,但从技术上而言其是一个表示空的字面值。
详情请见:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html#jls-3.9
回复 使用道具 举报
null是定义数据类型值的关键字,此类关键字共有三个true,false,null.
true,false定义boolean类型值;
null是用作定义引用类型值,标示该引用变量值为空,即该引用为空指针,没有指向任何对象。如Person p=null;
所以,现在明确 了null不是一个对象,也不是一种类型,而是一个关键字,定义引用类型值的关键字。

注意String s; String s= null; String s = "";String s= "zhangsan";Student s = new Student("zhangsan");的区别:
String s;定义了一个引用类型的变量s,但没有对s进行初始化,也不会分配内存空间;(如果是作为类的成员定义时,会默认的赋值为null,就等同于了String s=null).
String s = null; 定义了一个引用类型的变量s,并对s进行初始化,给变量s分配了一个空指针,用到s的时候会在栈内存分配一个变量s的空间,存储值为null,代表空指针;
String s = ""; 定义了一个引用类型的变量s,并对s进行初始化,在常量池中分配一个没有任何内容的空间,并把该空间的引用传递给变量s; 即给变量s分配了一个指针,指向常量池中的一段空内存;(应该是一个字节吧,记不清了)
String s = new String( ""); 定义了一个引用类型的变量s,并对s进行初始化,在栈内存中分配一个空间并将该空间的引用传递给s, 或者说给变量s分配了一个指针,指向栈内存中的一个没有任何内容的空间;
String s= "zhangsan";  定义了一个引用类型的变量s,并对s进行初始化,指向常量池中的一段内存空间, 即给变量s分配了一个指针,指向常量池中的一段空内存;
Student s = new Student("zhangsan"); 定义了一个引用类型的变量s,并对s进行初始化,在栈内存中分配一个空间创建一个Student类型对象,并将该对象的引用传递给s, 或者说给变量s分配了一个指针,指向栈内存中的对象;

S7~C7X80]T~}128}HY@J]6W.jpg (4.06 KB, 下载次数: 0)

定义数据类型值的关键字

定义数据类型值的关键字
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马