热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

局部静态变量在栈上_Java静态变量,成员变量,局部变量的默认值

1.静态变量publicclassGlobalVar{publicstaticcharaChar;publicstaticintanInt;public

4b615339432dad871a2c794aa091ba02.png

1.静态变量

public class GlobalVar {
    public static char aChar;
    public static int anInt;
    public static long aLong;
    public static float aFloat;
    public static double aDouble;
    public static String string;
    public static boolean aBoolean;
    public static int[] ints;
 
    public static void main(String[] args){
        System.out.println("全局变量char默认值:"+aChar);
        System.out.println("全局变量int默认值:"+anInt);
        System.out.println("全局变量long默认值:"+aLong);
        System.out.println("全局变量float默认值:"+aFloat);
        System.out.println("全局变量double默认值:"+aDouble);
        System.out.println("全局变量string默认值:"+string);
        System.out.println("全局变量aBoolean默认值:"+aBoolean);
        System.out.println("全局变量ints默认值:"+ints);
        if(aChar == 0){
            System.out.println("全局变量char默认值为空");
        }else{
            System.out.println("全局变量char默认值不为空");
        }
    }
}

全局变量char默认值:
全局变量int默认值:0
全局变量long默认值:0
全局变量float默认值:0.0
全局变量double默认值:0.0
全局变量string默认值:null
全局变量aBoolean默认值:false
全局变量ints默认值:null
全局变量char默认值为空

2.成员变量

public class MembereVar {
    private char aChar;
    private int anInt;
    private long aLong;
    private float aFloat;
    private double aDouble;
    private boolean aBoolean;
    private String string;
    private int[] ints;
    public static void main(String[] args){
        MembereVar membereVar = new MembereVar();
        System.out.println("成员变量char默认值:"+membereVar.aChar);
        System.out.println("成员变量int默认值:"+membereVar.anInt);
        System.out.println("成员变量long默认值:"+membereVar.aLong);
        System.out.println("成员变量float默认值:"+membereVar.aFloat);
        System.out.println("成员变量double默认值:"+membereVar.aDouble);
        System.out.println("成员变量boolean默认值:"+membereVar.aBoolean);
        System.out.println("成员变量string默认值:"+membereVar.string);
        System.out.println("成员变量ints默认值:"+membereVar.ints);
        if(membereVar.aChar == 0){
            System.out.println("成员变量char默认值为空");
        }else{
            System.out.println("成员变量char默认值不为空");
        }
    }
}

成员变量char默认值: 
成员变量int默认值:0
成员变量long默认值:0
成员变量float默认值:0.0
成员变量double默认值:0.0
成员变量boolean默认值:false
成员变量string默认值:null
成员变量ints默认值:null
成员变量char默认值为空

「结论:」

  • 静态变量和成员变量的默认值是一样的
  • 基本数据类型: int = 0, long =0, float = 0.0, double = 0.0, boolean=false
  • 对象数据类型: 默认值都为null

注意: char这个基本数据类型

  • char的默认字符是空, 类似于两个单引号中没有任何字符, 但是在代码中 是不能给字符串赋值为''(如 char ch = ''), 如果这样写编译会报错, 因此我们就 不能通过   if(ch == '') 这种形式判断, 这种形式同样会报错.

  • 当我们想要判断char字符是不是被人为的赋值, 我们可以这样写:

if(aChar == 0){
    System.out.println("成员变量char默认值为空");
}else{
    System.out.println("成员变量char默认值不为空");
}

  • 根据char是否为0进行判断: 如果为true, 则char没有被人为赋值, 是系统的默认值 如果为false, 则char已经被人为赋值.

3.局部变量

public class LocalVar {
    public static void main(String[] args){
        char aChar ;
        int anInt;
        long aLong;
        float aFloat;
        double aDouble;
        boolean aBoolean;
        String string;
        int[] ints;
        System.out.println("局部变量char默认值:"+aChar);
        System.out.println("局部变量int默认值:"+anInt);
        System.out.println("局部变量long默认值:"+aLong);
        System.out.println("局部变量float默认值:"+aFloat);
        System.out.println("局部变量double默认值:"+aDouble);
        System.out.println("局部变量boolean默认值:"+aBoolean);
        System.out.println("局部变量string默认值:"+string);
        System.out.println("局部变量ints默认值:"+ints);
    }
}

Error:(17, 43) java: 可能尚未初始化变量aChar
Error:(18, 42) java: 可能尚未初始化变量anInt
Error:(19, 43) java: 可能尚未初始化变量aLong
Error:(20, 44) java: 可能尚未初始化变量aFloat
Error:(21, 45) java: 可能尚未初始化变量aDouble
Error:(22, 46) java: 可能尚未初始化变量aBoolean
Error:(23, 45) java: 可能尚未初始化变量string
Error:(24, 43) java: 可能尚未初始化变量ints

「结论:」

  • 局部变量系统默认不会给你默认值, 如果想要使用局部变量则必须进行初始化.

注意: 局部变量的数组new了之后就又有默认值.

  • 局部变量中的基本数组类型new之后的默认值和成员变量(也可以说是静态变量)的默认值是相同.(请看下图)

public class LocalVar {
    public static void main(String[] args) {
        int[] ints;
        ints = new int[5];
        for (int i = 0; i 5; i++) {
            System.out.print(ints[i] + "  ");
        }
        System.out.println();

        float[] floats;
        floats = new float[5];
        for (int i = 0; i 5; i++) {
            System.out.print(floats[i] + "  ");
        }
        System.out.println();

        double[] doubles;
        doubles = new double[5];
        for (int i = 0; i 5; i++) {
            System.out.print(doubles[i] + "  ");
        }
        System.out.println();
    }
}

0  0  0  0  0  
0.0  0.0  0.0  0.0  0.0  
0.0  0.0  0.0  0.0  0.0  




推荐阅读
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 本文档旨在提供C语言的基础知识概述,涵盖常量、变量、数据类型、控制结构及函数定义等内容。特别强调了常量的不同类型及其在程序中的应用,以及如何正确声明和使用函数。 ... [详细]
  • 深入理解Java字节码:方法调用详解
    本文详细介绍了Java字节码中的方法调用机制,通过具体示例解析了字节码如何处理方法调用及其参数传递。文章由Mahmoud Anouti撰写,原文链接:https://dzone.com/articles/introduction-to-java-bytecode ... [详细]
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • Lua字符串1.字符串常见形式字符串或串(String)是由数字、字母、下划线组成的一串字符。Lua语言中字符串可以使用以下三种方式来表示:•单引号间的一串字符。 ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • 本文探讨了如何选择一个合适的序列化版本ID(serialVersionUID),包括使用生成器还是简单的整数,以及在不同情况下应如何处理序列化版本ID。 ... [详细]
  • 使用Java计算两个日期之间的月份数
    本文详细介绍了利用Java编程语言计算两个指定日期之间月份数的方法。文章通过实例代码讲解了如何使用Joda-Time库来简化日期处理过程,旨在为开发者提供一个高效且易于理解的解决方案。 ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • Java中提取字符串的最后一部分
    本文介绍了如何使用Java中的substring()和split()方法来提取字符串的最后一部分,特别是在处理包含特殊字符的路径时的方法与技巧。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 本文详细探讨了select和epoll两种I/O多路复用技术的内部实现原理,分析了它们在处理大量文件描述符时的性能差异,并通过具体示例代码展示了select的工作流程。 ... [详细]
author-avatar
手机用户2502935101
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有