detzero 2017-11-24 02:25 采纳率: 100%
浏览 1969
已采纳

各位大佬 JAVA当中引用类型的null 字符数组的默认类型‘’(空字符)和空字符串有什么区别。

空字符的ASC码是0,但是我查的时候发现标识也是null,而空字符串和空字符表示方式也是一样,绕的有点晕了。。

  • 写回答

2条回答 默认 最新

  • liuzhen12580 2017-11-24 02:29
    关注

    转:http://wenku.baidu.com/link?url=EY54QxuIpyb2Q7XiSDfc7FslliSo-9CI9bRpj2Op2DuQlKvoaR4Ge7JMBIhcsQqR8uAQSxhlqdIHlQ5bHoLpKsakh5uQB2Y34vzn_iT6fVm
    简单点说null表示还没new出对象,就是还没开辟空间 “”表示new除了对象,但是这个对象装的是空字符串。
    比如声明一个 Stringstr ;
    如果说str是null,那么内存根本没创建字符串对像.
    如果说str是空串,那么确实存在一个由str引用的字符串对像,只不过这个字符串的值是””
    null用来表示一个引用没有实例存在,而””本身是一个实例,有自己的对象空间,和”zzyyxx”这样的String没什么区别。两个都是有值!!!
    String s1 = “”;
    String s2 = null;
    调用s2.length()抛出nullpointerexception.
    调用s1.length()返回0.

    Java关键字null
    一、null是代表不确定的对象
    Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。
    比如:int a =null;是错误的。Ojbect o =null是正确的。
    Java中,变量的适用都遵循一个原则,先定义,并且初始化后,才可以使用。我们不能int a后,不给a指定值,就去打印a的值。这条对对于引用类型变量也是适用的。
    有时候,我们定义一个引用类型变量,在刚开始的时候,无法给出一个确定的值,但是不指定值,程序可能会在try语句块中初始化值。这时候,我们下面使用变量的时候就会报错。这时候,可以先给变量指定一个null值,问题就解决了。例如:

    Java code
    Connection conn = null; try { conn =DriverManager.getConnection(“url”, ”user”, ”password”); } catch (SQLExceptione) { e.printStackTrace(); } String catalog = conn.getCatalog();
    如果刚开始的时候不指定conn =null,则最后一句就会报错。
    二、null本身不是对象,也不是Objcet的实例null本身虽然能代表一个不确定的对象,但就null本身来说,它不是对象,也不知道什么类型,也不是java.lang.Object的实例。可以做一个简单的例子:

    //null是对象吗? 属于Object类型吗?

    Java code
    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类型
    三、Java默认给变量赋值
    在定义变量的时候,如果定义后没有给变量赋值,则Java在运行时会自动给变量赋值。赋值原则是整数类型int、byte、short、long的自动赋值为0,带小数点的float、double自动赋值为0.0,boolean的自动赋值为false,其他各供引用类型变量自动赋值为null。
    这个具体可以通过调试来看。
    四、容器类型与null
    List:允许重复元素,可以加入任意多个null。Set:不允许重复元素,最多可以加入一个null。Map:Map的key最多可以加入一个 null,value字段没有限制。数组:基本类型数组,定义后,如果不给定初始值,则java运行时会自动给定值。引用类型数组,不给定初始值,则所有的元素值为null。
    五、null的其他作用
    1、判断一个引用类型数据是否null。用==来判断。
    2、释放内存,让一个非null的引用类型变量指向null。这样这个对象就不再被任何对象应用了。等待JVM垃圾回收机制去回收。

    String a; 申明一个string类型的 a,即没有在申请内存地址,更没有在内存任何指向引用地址;
    String a = null ; 申明一个string类型的 a,同时在内存里申请了一个地址,但是该地址不指向任何引用地址;
    String a = "" ;申明一个string类型的 a,既在内存里申请了地址,该地址又指向一个引用该字符串的引用地址;
    一般来说字符串的使用最好用String a = "" ;语句,
    可以防止后面的程序因引用地址混乱而找不到的异常!
    String a = null ; String a; 劲量少用! 能不用就不要使用!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。