1. 原文链接:https://www.cnblogs.com/ipetergo/p/6826909.html
    String s;和String s=null;和String s="a";有什么区别?  
  2.  
  3. 针对这三种情况,使用out.println(s);的时候,第一个会出现异常,第二个会输出null.第三个则会输出a.  
  1. 这是为什么呢?这三句声明语句,各自作了什么呢?
  2. 答:
    第一个只是定义了一个String类型变量s,并没有给它赋初值,在Java中,默认在使用一个变量的时候必须赋予它初值(降低风险)。
  3. 第二个和第三个都定义了String类型变量s,并赋予它初值,只不过第二个赋予的值为null(空)罢了
  4. 主要要理解的是String s; s为一个引用~~它不是对象  
  5. 第一个是没有初始化的引用;  
  6. 第二个为空引用;
    第三个是在字符串池里写入一个字符'a',然后用s指向它。
    另外,  
  7. String s="a"String s=new String("a");是有本质上的区别的  
  8. 前者是在字符串池里写入一个字符'a',然后用s指向它;
    后者是在堆上创建一个内容为"a"的字符串对象。
    String str="aaa"; //于栈上分配内存
    String str=new String("aaa"); //于堆上分配内存
  9. String s; 系统会自动赋值null
  10. String s;只是给s分配一个内存空间  
  11. String s=null;是分配的空间中存储的值为空值  
  12. String s="a";这句就不用我多说了分配的空间的值为字符a
  13. 延伸补充:
  1. 在成员变量的定义中,String s;等同于String s=null;
    而在本地变量(方法变量)的定义中,String s;不等同于String s=null;,这时要使用s必须显式地赋值。
    这些虽然是小知识点,但在实际应用中很重要,也很容易被一些人忽视,特此提出。
    还有一点要说明的是:
    只要是在方法在中定义变量都要显示赋初值,main()方法也不例外,而在方法之外编译器回自动赋初值。

String s String s=null和String s="a"区别的更多相关文章

  1. c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.

    c# 调用C++的dll报错 Attempted to read or write protected memory:   原因是:c# 传递Null的string值导致的,将Null改为string ...

  2. string、Empty和null三者的区别

    string.Empty和null三者的区别 本文转自  http://www.bitscn.com/pdb/dotnet/201003/181883.html 时间:2010-03-01 00:00 ...

  3. null 与 string.IsNullOrEmpty 区别

    != null 就是不为null!string.IsNullOrEmpty  不是null且不是""(string.Empty) -----------Response: != n ...

  4. [BTS] Error biztalk arguments null exception string reference not set to an instance of a string. parameter name

    biztalk arguments null exception string reference not set to an instance of a string. parameter name ...

  5. C#中String.Empty,“”,NULL的区别

    一.String.Empty String类的静态只读字段.定义如下: public static readonly string Empty; 二.“” 被赋值为“”的字符串变量,会在栈上保存一个地 ...

  6. C# 中 string.Empty、""、null的区别

    原文C# 中 string.Empty."".null的区别 一.string.Empty 和 "" 1.Empty是string类中的一个静态的只读字段,它是 ...

  7. C#中string.Empty和""、null的区别

    string.Empty是string类的一个静态常量,而""则表示一个空字符串. string是一种特殊的引用类型,它的null值则表示没有分配内存. 使用ILSpy反编译Str ...

  8. JAVA中String = null 与 String = "" 的区别

    JAVA中String = null 与 String = ""的区别 笔者今天在Debug的时候发现的NPE(NullPointerException),辛辛苦苦地调试了半天,终 ...

  9. Java中string 创建对象时 “”和null的差别

    null和""的差别 问题一: null和""的差别 String s=null; string.trim()就会抛出为空的exception String s ...

  10. MSIL实用指南-加载null、string、long、float、double等值

    本篇讲述怎么加载null.string值.long值.float值.double值. 加载null不需要参数值,只要 Emit ldnull 其它几个命令要 Emit <指令> <值 ...

随机推荐

  1. Spring之3:BeanFactory、ApplicationContext、ApplicationContextAware区别

    在Spring中系统已经为用户提供了许多已经定义好的容器实现,而不需要开发人员事必躬亲.相比那些简单拓展BeanFactory的基本IoC容器,开发人员常用的ApplicationContext除了能 ...

  2. L2-014. 列车调度(set的使用,最长递增子序列)

    L2-014. 列车调度 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 火车站的列车调度铁轨的结构如下图所示. Figure ...

  3. 环形缓冲区的应用ringbuffer

    在嵌入式开发中离不开设备通信,而在通信中稳定性最高的莫过于环形缓冲区算法, 当读取速度大于写入速度时,在环形缓冲区的支持下不会丢掉任何一个字节(硬件问题除外). 在通信程序中,经常使用环形缓冲区作为数 ...

  4. rails表单控件helper

    1.form加入HTML属性 <%= form_for(@device, :html => {:method=>"post", :id=>"for ...

  5. mybatis---demo1--(n-n)----bai

    实体类1: package com.etc.entity; import java.util.List; public class RoleInfo { private int rid; privat ...

  6. leetcode643

    double findMaxAverage(vector<int>& nums, int k) { double max = INT_MIN; int len = nums.siz ...

  7. Shell杀tomcat进程

    一.killandclean.sh #!/bin/bash pid=($(ps -ef | grep tomcat | egrep -v grep | awk '{print $2}')) lengt ...

  8. Error: Cannot run program "/home/xxx/android_developer_tools/android-ndk-r8/ndk-build.cmd": Unknown reason

    运行OpenCV官方例子  tutorial-2-mixedprocessing 总提示  /home/xxx/android_developer_tools/ 明明在PATH中采用好几种方法都加入了 ...

  9. 使用git将代码传到github

    廖雪峰git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 注:add加入 ...

  10. Group Layout

    ----------------siwuxie095                             将根面板 contentPane 的布局切换为 Group Layout     Grou ...