zoukankan      html  css  js  c++  java
  • 转:String数组初始化

    近日,笔者在java编程中因为疏忽对String数组的初始化定义错误,导致程序运行出错。现将所理解的String数组在此进行说明,并对String数组初始化进行分析。

    //一维数组
    String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组
    String[] str = new String[]{"","","","",""};
    String[] str = {"","","","",""};
    //二维数组
    String[][] str = new String[2][2]; //创建一个2行2列的二维数组

    String数组初始化区别
      String[] str = {"1","2","3"}与String[] str = new String[]{"1","2","3"}在内存里有什么区别?
      编译执行结果没有任何区别。更不可能像有些人想当然说的在栈上分配空间,Java的对象都是在堆上分配空间的。

      这里的区别仅仅是代码书写上的: 
    String[] str = {"1","2","3"}; 这种形式叫数组初始化式(Array Initializer),只能用在声明同时赋值的情况下。
      而 String[] str = new String[]{"1","2","3"} 是一般形式的赋值,=号的右边叫数组字面量(Array Literal),数组字面量可以用在任何需要一个数组的地方(类型兼容的情况下)。如:
      String[] str = {"1","2","3"}; // 正确的
      String[] str = new String[]{"1","2","3"} // 也是正确的

      String[] str;
      str = {"1","2","3"}; // 编译错误
    因为数组初始化式只能用于声明同时赋值的情况下。

    改为:
      String[] str;
      str = new String[] {"1","2","3"}; // 正确了
    又如:
      void f(String[] str) {
      }
      f({"1","2","3"}); // 编译错误
    正确的应该是:
      f(new String[] {"1","2","3"});

    PS:
      笔者所犯错误为在初始化数组的时候定义为String[] str = new String[]{},如此定义相当于创建了创建一个长度为0的String(字符串)型的一维数组。在后期为其赋值的时候str[0]="A",就会抛出异常。

  • 相关阅读:
    02-CSS基础与进阶-day4_2018-08-31-20-42-09
    02-CSS基础与进阶-day4__2018-08-31-20-22-57
    02-CSS基础与进阶-day3_2018-08-29-21-30-56
    02-CSS基础与进阶-day3_2018-08-29-20-39-58
    02-CSS基础与进阶-day3_2018-08-29-20-20-56
    02-CSS基础与进阶-day2_2018-08-27-22-00-56
    02-CSS基础与进阶-day2__2018-08-27-21-27-31
    02-CSS基础与进阶-day2_2018-08-27-20-57-55
    Pytest(12)pytest缓存
    Pytest(11)allure报告
  • 原文地址:https://www.cnblogs.com/hyq0002013/p/5563838.html
Copyright © 2011-2022 走看看