转: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",就会抛出异常。

时间: 2024-08-03 09:19:56

转:String数组初始化的相关文章

Java之路(四)数组初始化

本文主要讲数组的初始化方法.可变参数列表以及可变参数列表对函数重载的影响. 数组初始化 定义数组的方式: int[] arr1; 或  int arr1[]; 数组初始化 通过上边的定义,我们只是得到了一个数组的引用.这时已经为引用分配了存储空间,但是还没有给数组对象本身分配任何空间.想要给数组对象分配存储空间,必须使用初始化表达式. a.在数组创建的地方进行初始化,如: int[] arr1 = {1,2,3,4,5}; 这种方式等价于使用new来进行存储空间分配. b.给数组的引用赋值,如:

Chapter5_初始化与清理_数组初始化与可变参数列表

一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥有这个数组的存储空间.要获取数组的存储空间,必须要写初始化表达式,最朴素的表达式类型如下 1 int[] a = {1,2,3}; 如果在编写程序时,不能确定数组的长度,可以使用如下方式,直接用new在数组里创建元素 1 int[] a = new int[3]; 当创建对象数组时,数组中的元素仅仅

C++数组初始化方法

定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia. 在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接地访问堆中的对象. 注意:C++使用new和delete在堆(自由存储区)上分配和释放动态数组. 动态数组初始化: 1. 元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始

java数组初始化

java数组初始化 //静态初始化数组:方法一 String cats[] = new String[] { "Tom","Sam","Mimi" }; //静态初始化数组:方法二 String dogs[] = {"Jimmy","Gougou","Doggy"}; //动态初始化数据 String books[] = new String[2]; books[0] = "T

字符串数组初始化相关问题总结

C字符串数组初始化相关问题总结 在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串.总结起来有以下三种方式: (1) char str[10]=""; (2) char str[10]={'\0'}; (3) char str[10]; str[0]='\0'; 第(1)(2)种方式是将str数组的所有元素都初始化为'\0',而第(3)种方式是只将str数组的第一个元素初始化为'\0'.如果数组的size非常大,那么前两种方式将会造成很大的开销. 所以,除非必要(

JAVA学习记录(一)——Number\Character\String\数组\Date\Calendar\GregorianCalendar

jdk环境配置 Java Number类 装箱拆箱 Number类的成员方法 Java Character类 简介 Character 方法 Java String类 创建字符串 字符串长度length 连接字符串 创建格式化字符串 String 方法 Java StringBuffer和StringBuilder类 StringBuffer 方法 Java 数组 声明数组变量 创建数组 遍历数组 for foreach Arrays 类 Java日期时间 Date 构造函数 日期方法 获取当前

C#数组初始化

C#的数组初始化是在声明数组时将初始值放在大括号({})之内.如果没有指定初始值,则数组成员将自动初始化为该数组类型的默认初始值.请阅读数组的属性.如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值null. 一.一维数组的初始化 1. 在声明数组时将其初始化.如: int[] array = new int[6]{1,2,3,4,5,6};string[] stringArray = new string[3]{"string1", "string2&quo

数组初始化及赋值的方法,memset的使用

1. 数组初始化: 即定义时即赋值: int a[4]={0}; //每一个位置的int都为0 int b[4]={1}; //只有第一个元素为1,其他都为0 所以要想把数组初始化为其他值,则需要一个个的指定值: int b[4]={1,2,3,4};//比如指定为1,2,3,4 或者先统一初始化为0,再利用for循环改变数组的每一个元素. 2. 数组的赋值: 在定义过后,需要给数组每一个元素赋值时,不能再像初始化那样: a[4] = {1,3,5,7}; //这是错误的, a={1,3,5,7

C/C++数组初始化

0 Xcode 10.1,编译器clang GNU14++ 1.整型数组的初始化-栈初始化 //默认初始化 int a[5] = {}; //[0, 0, 0, 0, 0] //全部初始化为0 int a[5] = {0}; //[0, 0, 0, 0, 0] //c++11新写法 int a[5]{}; //[0, 0, 0, 0, 0] //注意,想要整型数组 全部初始化为1的时候不能粗暴的设置为 int a[5] = {1}; //[1, 0, 0, 0, 0] // 因为 数组初始化列表