java各数据类型的变量的默认值

在java中,如果我们对变量不做初始化,变量具有什么默认值?

首先需要了解的是,在java中,局部变量是没有默认值的,所以在声明时,如果没有赋值,后面程序直接使用该变量,编译器会检查出错误。(包装类也是如此)。而成员变量作为类的成员,JVM会自动给他们赋初值。

局部变量不做初始化:可以看出如果不做初始化直接使用,会报错。

在这里插入图片描述

成员变量(类成员)不做初始化的默认值:
八种基本类型(byte short int long float double char boolean)

在这里插入图片描述
//结果

byte类型的默认值:0
short类型的默认值:0
int类型的默认值:0
long类型的默认值:0
float类型的默认值:0.0
double类型的默认值:0.0
char类型的默认值: 
boolean类型的默认值:false

这里需要说明的是,char类型变量后面没有输出,这并不是char类型变量没有默认值,而是默认值为"空字符",即’\u0000’,数值为0

System.out.println(p.c=='\u0000');

输出为:true

true
包装类(Byte,Short,Integer,Long,Float,Double,Character)
      Byte b;
      Short s;
      Integer i;
      Long l;
      Float f;
      Double d;
      Character c;
      Boolean t;
    public static void main(String[] args) {
        Num_default p = new Num_default();
        System.out.println("包装类");
        System.out.println("Byte类型的默认值:"+p.b);
        System.out.println("Short类型的默认值:"+p.s);
        System.out.println("Integer类型的默认值:"+p.i);
        System.out.println("Long类型的默认值:"+p.l);
        System.out.println("Float类型的默认值:"+p.f);
        System.out.println("Double类型的默认值:"+p.d);
        System.out.println("Character类型的默认值:"+p.c);
        System.out.println("Boolean类型的默认值:"+p.t);
    }

输出全为:null

Byte类型的默认值:null
Short类型的默认值:null
Integer类型的默认值:null
Long类型的默认值:null
Float类型的默认值:null
Double类型的默认值:null
Character类型的默认值:null
Boolean类型的默认值:null
引用类型(String,数组)
      int[] array;
      String str;
        public static void main(String[] args) {
        Num_default p = new Num_default();


        System.out.println(p.array);
        System.out.println(p.str);
    }

输出:

null
null
注意:如果数组使用new在堆上分配了空间,则数组就会获得默认值,即使数组为局部变量也是如此。

``    public static void main(String[] args) {
      	//局部变量数组
         int[]int_array =new int[5];//声明整型数组
         String[] atr_array = new String[5];//声明String类型数组
        System.out.println(int_array[0]);
        System.out.println(atr_array[0]);

    }`

打印:
	0
	null

这里又突然想到还有静态成员变量(静态变量),但运行过后跟对应的基本数据类型默认值相同,

```java
静态byte类型的默认值:0
静态short类型的默认值:0
静态int类型的默认值:0
静态long类型的默认值:0
静态float类型的默认值:0.0
静态double类型的默认值:0.0
静态char类型的默认值: 
静态boolean类型的默认值:false

静态变量不能声明在方法中:

可以看到提示 ‘static’ not allowed here(static不被允许在这儿
在这里插入图片描述
另外,对于局部变量,包括protected,private,public这些也不能加,而全局变量是可以的,静态变量是定义在类中,方法体外面的,局部变量是保存在栈中的,而静态变量保存在方法区,局部变量出了方法就会被栈回收了,而静态变量不会,所以局部变量前不能加static关键字,同一时刻,只可能有一块栈内存被当前方法使用,用完了就回收了

总结:

实例变量(成员变量):有默认值;属于某个类的实例,实例变量在对象创建的时候创建,在对象被销毁的时候销毁;static块和方法不能直接调用它。
静态变量:它属于类,不能被声明在方法中,有默认值,静态变量在程序开始时创建,结束时销毁,可以用类名.变量名访问。
局部变量:在一个方法或者代码块内,没有默认值,第一次使用时,必须初始化
注意:对于数组, 如果使用new在堆上分配了空间,那么对应数组索引有默认值。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值