[Java] 数组声明有关问题分析
来源:互联网 发布:淘宝风险交易 套现 编辑:程序博客网 时间:2024/05/21 10:00
问题
最近在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”}中的=号处体现)
* 想必,通过内部分析 你应该能轻易理解这其中的差别。
1 0
- [Java] 数组声明有关问题分析
- java有关数组的问题
- 数组有关问题
- 数组有关问题
- java数组声明详解
- java中的数组声明
- JAVA声明对象数组
- java数组声明,初始化
- java 数组声明初始化
- JAVA有关数组
- keil C数组声明问题
- Java数组声明、创建、初始化
- Java数组声明、创建、初始化
- Java数组声明、创建、初始化
- Java数组声明、创建、初始化
- Java数组声明、创建、初始化
- Java数组声明、创建、初始化
- Java数组声明、创建、初始化
- MySQL的max_connections
- Servlet中的Response和Request
- CALayer引发的思考
- AJulyed
- android - Establishing a Build Environment
- [Java] 数组声明有关问题分析
- 玩转Android之调试应用
- 权限配置思路
- Docker多主机网络
- Django 学习小组:基于类的通用视图详解(一)
- Edit Distance 编辑距离
- Unity Shader LOD
- OpenGL链接
- android - See Build Numbers for a full listing of branches you may choose from