java中基础类型的初始值,以及一些平时不注意的小知识

有时候总是卡在一些类型的初始值上,今天闲下来就来自己给自己记录一下。

String   a; 

如果直接打印会提示未初始化。并且未初始化的a不能比较。

这时,我们定义个person类

person{

  String name;

  private Integer age;
  private int aa;

.......

}

我们来看看age会怎么样。

结果还是不能够打印,但是却可以用于比较

person p1= new person();
        
        
if("".equals(p1.getName())){
    System.out.println("OK 空字符串");
}else if(p1.getName()==null){
    System.out.println("OK null");
}

结果:OK null

2、int

int a;
System.out.println(a);

这里报错,不能够使用未实例化的。同时说明不能够用这个数运算。

同样放在类里面的  int  aa

person p1 = new person();

System.out.println(p1.getAa());

这时候的  aa  打印出来是0。而且这个值还可以运算。

(同时也说明了一点,包装类默认值)

 

3、 Integer

p1.getAge打印出来是null.

 4、说完上面的,来看一下我遇到的一些小实例。

     String a1="a";
        String a2="a";
        String a3=new String("a");

        if(a1==a3){
            System.out.println("Y");
        }else{
            System.out.println("N");
        }
        
        int a = 1;
        Integer b = new Integer(1);
        Integer c = new Integer(1);

        if(b.equals(c) ){
            System.out.println("是");
        }else{
            System.out.println("否");
        }
            

大家先看一下上面的a、b、c两两比较,结果是会输出是,还是否。

我先来告诉大家答案吧,a、b、c两两比较都是“

为什么?我来大致的解释一下。这里int 为基本数据类型,他们有一个特点,就是存在栈中的数据可以共享。int a = 1;已经在堆中开辟了一块空间,之后integer在去实例化的时候不会重新去new 一个,因为他是包装类。如果还是不明白,自己运行一下,然后在上网查一下java基本数据类型在内存中的知识。

 

看完上面数字的,我们在来比较一下a1、a2、a3

a1和a2,结果Y。      a1和a3,结果N

这里我也来解释一下吧,在java的内存中还有一个字符串池,利用String a1 = "a";实例化的a字符串会放到字符串池中,并在堆中开辟一个空间存放“a”。

当String a2="a";时发现已经有a1="a";了所以直接让a2指向a即可。 

但是String a3=new String("a");并不能和Integer一样,它是一个类,要去堆中重新开辟一块空间。

posted @ 2016-01-28 14:19  小祥工作室  阅读(338)  评论(0编辑  收藏  举报