[Java] 数组声明有关问题分析

问题

最近在CSDN论坛上闲逛的时候,看见有朋友在询问一些基础的知识点,而恰好最近我一直在学Java基础部分,因此我从内存的角度试着总结了一下有数组声明有关问题

@Test
    public void Test(){
        String[] p = null;
        p = {"no"};//这种不指定数组下标初始化的方式只在下一行这种格式中适用
        String[] s = new String[]{"no"};
        p[0] = "y";//此处编译可以通过,但是运行通过不了,无法输出p[0]的值
        p = new String[]{"yes"};//这种方式就完全没问题,编译和运行都pass
    }

总结

  • 其实这种问题从类和对象的内部分析是很好理解的,首先要知道的是

    * 栈(stack):局部变量、声明对象的引用名、数组的引用名,定义的类方法中的参数以及局部变量

    * 堆(heap) :new出来的“东西”(如:对象的实体,数组的实体),含成员变量(即所谓的全局变量)

    * 紧接着对象的引用要与对象的实体进行关联:栈中的对象引用中保存了堆中的实体的首地址,因而才可以正常编译、运行。

    *

    * 你给出的问题分析:

    * 第一种,无new操作,因此未在堆中将{“no”}保存,因此这种方式是不行的

    * 第二种,与第一种事实上是一个问题,只是第二种编译可以通过

    * 第三种,也就是通常我们声明一个数组并初始化的步骤了,其中就包含三部分:

    * 1)在栈中声明一个对象的引用名(此步在第一行String[] p = null中体现,此时p就是一个数组对象的引用名)

    * 2)在堆中创建一个字符串数组的实体(此步在new String[]{“yes”}中体现)

    * 3)将实体的首地址赋给对象的引用(此步在p = new String[]{“yes”}中的=号处体现)

    * 想必,通过内部分析 你应该能轻易理解这其中的差别。

时间: 2024-12-14 07:05:40

[Java] 数组声明有关问题分析的相关文章

java 数组声明

Java 数组声明常用的方式 1.类型  数组名称[] = new 数组类型[个数] 2,类型  数组名称    =  new 数组类型[] {} 3,类型[] 数组名称 = {} //类型 数组名[] = new 数组类型 [个数] int $arr[] = new int [4]; $arr[0] = 1; $arr[1] = 2; $arr[2] = 3; $arr[3] = 4; //类型 数组名称 = new 数组类型[]{} int $arr1[] = new int[]{1,2,3

Java 数组声明的几种方式

Java数组定义声明的几种方法: 1. 类型名称[] 变量名=new 类型名称[length]; 2.类型名称[] 变量名={?,?,?}; 3.类型名称[] 变量名=new 类型名称[]{?,?,?}; 代码样例: public class Example1 { public static void main(String []args){ //数组定义的几种方法 // 1. 类型名称[] 变量名=new 类型名称[length]; int []a=new int[4]; a[0]=1; a[

Java 数组声明与初始化

引言 学习了好久的java,每次要写数组的声明和初始化代码,总是理不清.最近又碰到了一次这种情况.这次拿出<Thinking In Java>好好总结一翻. 数组声明 对于数组的声明其实都没多大问题,推荐的写法是使用 数据类型 + [] + 数组名称的方式,因为这种方式可以很清楚的表明这是某一种类型的数组.例如,声明一整数类型的数组. 1 int[] a; 数组初始化 其实出现问题最多的就是数组的初始化.数组的初始化分为三种方式,再遇到初始话的时候,总是会搞不清楚.根据我个人的理解,数组的初始

Java数组声明、初始化

维数组的声明方式:type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 [数组元素的个数] 实例:TestNew.java: 程序代码: public class TestNew { public static void main(String args[]) { int[] s ; int i ; s = new int[5] ; for(i = 0 ; i < 5 

java 数组声明方法

1 //数组 2 public class Test16{ 3 public static void main(String args[]){ 4 5 //声明一: 6 int [] x; 7 x = new int[3];//为数组申请内存空间,3个 8 x[0]=10; 9 x[1]=20; 10 x[2]=30; 11 //求数组的长度: 12 int len=x.length; 13 System.out.println("变量x的长度:"+len); 14 15 //声明二:

java数组扩增的三种方式

java数组声明的时候必须声明其长度,但当我们想对数组进行扩增的时候该怎么办呢? 下面三种方式都可以进行扩增,最后一种也最为方便. 1 /** 2 * 手动循环扩增 3 */ 4 int[] arr = { 1, 2, 3 }; 5 int[] tempArray = new int[arr.length * 2]; 6 for (int i = 0; i < arr.length; i++) { 7 tempArray[i] = arr[i]; 8 } 9 //tempArray = { 1,

Java数组的声明和遍历

Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,number99. 本篇将为大家介绍 Java 数组的声明,创建,初始化和遍历,并给出其对应的代码. 声明数组变量 首先必须声明数组变量,才能在程序中使用数组.下面是声明数组变量的语法: dataT

java数组的声明、创建和遍历

一.数组的声明.创建 1.一维数组 先是声明 dataType[] arrayRefVar; // 首选的方法 数据类型[] 数组名; dataType arrayRefVar[]; // 效果相同,但不是首选方法 数据类型 数组名[]; 创建 (1) arrayRefVar = new dataType[arraySize]; 数组名 = new 数据类型[数组大小]; (2) dataType[] arrayRefVar = new dataType[arraySize]; 数据类型[] 数

什么情况下使用break关键字? 什么情况下使用Continue关键字? Java如何声明一个数组?JS如何声明一个数组?如何获取数组长度? 如何遍历数组?

什么情况下使用break关键字?什么情况下使用Continue关键字? Break Break关键用于终止循环. 示例: 1 2 3 4 5 6 for (int i = 0; i < 10; i++) {   if (i == 4) {     break; //终止循环,后面的循环不再执行   }   System.out.println(i); } Continue Continue关键字用于终止本次循环,其它循环继续. 示例: 1 2 3 4 5 6 7 for (int i = 0;