java数组

不知抽了什么风,以前都是用c来写小程序的,周二那天好不得的说,从今天开始以后用java语言写;为此,阔别了半年的MyEclipse就在那天唤醒了,作为菜鸟的我总感觉太多东西要学,太多东西了,..(打住感概.....);

因为总用C语言中的结构体来归并一些若干变量的集合,好吧,java中木有结构体,我只能用类了模拟了;

class Sum
{
int start ;
int end ;
int sum ;
}

Sum dp[] = new Sum[10] ;
dp[1].sum= 1;

报错,NullPointerException,我写个程序容易么我,报你妹啊;

因为我是在回忆的阶段,为此补下知识;


1.  普通数组:

  包括数组的声明和创建,要想使用数组必须为它分配内存空间,new对应数组;

  1. 一般默认值为对应0,0.0,false等等    --:int bb[][] = new int[10][1] ;
  2. System.out.println(bb[0]+" "+bb[1]+" "+bb[2]);------[I@1fc4bec [I@dc8569 [I@1bab50a ,仔细一看,还以为是数组的地址不是连续的,想下,为了安全考虑java里没有提供直接操作内存操作的方法,所以这该不是地址本身吧!
  3. 任何类均为Object类的间接子类,所以均继承方法public int hashCode()   

    散列的哈希码:默认的实现是将对象内部地址转化为整数作为HashCode,这当然能保证每个对象具有不同的引用,是对象在JVM虚拟出来的内存地址。不是实际物理内存地址;

2.   对象数组

  1. 对象的使用,先是声明,然后创建,堆中的内存空间的地址的引用放在栈中,实体是在堆中,对象借此引用可以直接操作对象的属性等
  2. 一个类创建的对象如果有两个对象,如果有相同的引用,那么就有完全相同的实体,如果没有实体,则为空对象,空对象不能使用,NullPointerException
    但是编译不会对空对象做检查;

  3. java所谓的垃圾回收机制,这种机制周期的检测某个实体是否已不再被任何对象所拥有(引用),如果发现这样的实体,就会释放该实体所占的内存;

所以之前的  NullPointerException 可以解释了,每个对象数组中没存对象、存的都是null的 ,只有在new一个对象时 内存空间才开辟出来

那么则需要用循环来逐个new啊,

for (int i = 0 ;i <dp.length ;i++)     dp[i] = new Sum(); 

但是为什么不能用增强for呢 ?for (Sum h:dp) h = new Sum();
java.lang.NullPointerException   ,--------见下增强for:


3 .  增强for

/*
一般for循环的简写形式,,for(声明循环变量:数组名字),
但是里面的循环变量迭代器只能取到里面的值,起迭代作用,不能做修改,
这就是我们不能new Sum()了的原因了,因为 h 开始赋值为null,随后分配了内存,
但这只是属于他自己,并未改变数组 dp重的各个对象 ;
(可以看看 Iterator 的作用和用法)
*/ String[] persons={"张三","李四","王五"}; for(String person:persons){ System.out.println(person); person = "person" ; //张三 李四 王五 } int a[]={77,88,99} ; int t = 0; for (int i:a){   i++ ;   System.out.println(i) ;   System.out.println("source "+a[t]) ;   t++ ; } /* 78 source 77 89 source 88 100 source 99 */
原文地址:https://www.cnblogs.com/foreverzd/p/3412215.html