java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...

探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值

当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,float,double)

只有开发人员对其进行初始化,java不会对其进行初始化,

如果不初始化基本类型变量,则编译时就会报错

实验的部分包装类如 Byte,Char,Boolean,Short,Integer,Long,Float,Double 等类的约束和基本类型如出一辙

当基本数据类型作为类成员变量时,java会自动给这些变量初始值赋值

class ElementTypes {

// 作为类成员变量声明

byte defaultBasicByte;

char defaultBasicChar;

boolean defaultBasicBoolean;

short defalutBasicShort;

int defaultBasicInt;

long defaultBasicLong;

float defaultBasicFloaat;

double defaultBasicDouble;

Byte defaultByte;

Char defaultChar;

Boolean defaultBoolean;

Short defalutShort;

Integer defaultInt;

Long defaultLong;

Float defaultFloaat;

Double defaultDouble;

}

public class Exploration {

/**

* 输出基本数据类型及部分包装类成员变量被java赋予的默认值

*/

public static void ExploreClassFieldsDefaultValue() {

ElementTypes elementTypes = new ElementTypes();

// 调试输出

logger.debug(byte.class + " DefaultValue " + elementTypes.defaultBasicByte);

logger.debug(char.class + " DefaultValue " + elementTypes.defaultBasicChar);// Console

// 输出为空方格

logger.debug(boolean.class + " DefaultValue " + elementTypes.defaultBasicBoolean);

logger.debug(short.class + " DefaultValue " + elementTypes.defalutBasicShort);

logger.debug(int.class + " DefaultValue " + elementTypes.defaultBasicInt);

logger.debug(long.class + " DefaultValue " + elementTypes.defaultBasicLong);

logger.debug(float.class + " DefaultValue " + elementTypes.defaultBasicFloaat);

logger.debug(double.class + " DefaultValue " + elementTypes.defaultBasicDouble);

logger.debug(byte.class + " DefaultValue " + elementTypes.defaultByte);

logger.debug(char.class + " DefaultValue " + elementTypes.defaultChar);

logger.debug(boolean.class + " DefaultValue " + elementTypes.defaultBoolean);

logger.debug(short.class + " DefaultValue " + elementTypes.defalutShort);

logger.debug(int.class + " DefaultValue " + elementTypes.defaultInt);

logger.debug(long.class + " DefaultValue " + elementTypes.defaultLong);

logger.debug(float.class + " DefaultValue " + elementTypes.defaultFloaat);

logger.debug(double.class + " DefaultValue " + elementTypes.defaultDouble);

}

@Test // 如果不用 JUnit 测试也可以选择直接 main函数

public void test() throws Exception {

ExploreClassFieldsDefaultValue();

}

}

以上将基本数据类型和部分包装类声明为该类型的类属性变量,在不声明初始值的前提下然后在类的静态方法中输出其指向的变量空间中的值

控制台输出,即可知道 java 在构造类的时候默认给这些类型变量的默认值

2020-11-21 21:34:35.773 [main] DEBUG localCollection.Exploration - byte DefaultValue 0

2020-11-21 21:34:35.773 [main] DEBUG localCollection.Exploration - char DefaultValue

2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - boolean DefaultValue false

2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - short DefaultValue 0

2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - int DefaultValue 0

2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - long DefaultValue 0

2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - float DefaultValue 0.0

2020-11-21 21:34:35.774 [main] DEBUG localCollection.Exploration - double DefaultValue 0.0

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Byte DefaultValue null

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Character DefaultValue null

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Boolean DefaultValue null

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Short DefaultValue null

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Integer DefaultValue null

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Long DefaultValue null

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Float DefaultValue null

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.Double DefaultValue null

2020-11-22 08:25:26.304 [main] DEBUG localCollection.Exploration - class java.lang.String DefaultValue null

以上第二行 char 类型对应的默认值 在控制台是输出了一个“空白方格”???

首先搞清楚 char 类型在 java 中是 16位的,使用的是 Unicode 编码方式,其中 Unicode 编码前 0~127 是 8 位的 ASCII 值,而 ASCII 值中又分为 控制字符和可显示字符

使用java 方法进行尝试输出

public static void examineCharWithASCII() {

char a = 0x00;// 十六进制数 0x00对应的ASCII码是控制字符空字符(Null)

char c = 0x20;// 十六进制数 0x00对应的ASCII码是控制字符EM连接介质中断

char b = 0x19;// 十六进制数 0x00对应的ASCII码是可显示字符(空格)(sp)

char d = 0x21;// 十六进制数 0x00 对应的ASCII码是可显示字符'!'

char u0 = '\u0000';// 使用 Unicode 编码方式进行初始化

logger.debug("\u0000 to " + char.class + u0);

logger.debug("0x00 to " + char.class + a);

logger.debug("0x19 to " + char.class + b);

logger.debug("0x20 to " + char.class + c);

logger.debug("0x21 to " + char.class + d);

}

输出结果

b0b70c682496defde5ce9bda411d8820.png

输出结果的内容复制效果(实际上是要分行复制的,null(什么都没有)真的很影响整段复制粘贴)

2020-11-22 08:28:28.780 [main] DEBUG localCollection.Exploration - to char

2020-11-22 07:49:37.715 [main] DEBUG localCollection.Exploration - 0x00 to char

2020-11-22 07:49:37.715 [main] DEBUG localCollection.Exploration - 0x19 to char

2020-11-22 07:49:37.715 [main] DEBUG localCollection.Exploration - 0x20 to char

2020-11-22 07:49:37.715 [main] DEBUG localCollection.Exploration - 0x21 to char!

'\u0000' 在 unicode 中就是 NUL 控制字符

0x00 和 0x19 这两个十六进制数对应的控制字符不可显示(实际上就是不能正常显示),在控制台就会显示方格(除了null控制字符是真的什么都没有,其他的控制字符输出的方格复制进纯文本编辑器还是可以看到对应的<0x19>),其它啊控制字符类似效果

0x20 和 0x21 分别是空白可显示字符和'!'可显示字符,所以一个打印的是空白(可被选中的空格)和感叹号,其他可显示字符与其效果类似

文档当前版本 v1.0

版本号

修改内容

备注

时间

1.0

生成初始内容

新建文档

1.1

添加调试截图

暂无

2020年12月4日 14点24分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 字符串 移位_使用位运算、值交换等方式反转java字符串-共四种方法

在本文中&#xff0c;我们将向您展示几种在Java中将String类型的字符串字母倒序的几种方法。StringBuilder(str).reverse()char[]循环与值交换byte循环与值交换apache-commons-lang3如果是为了进行开发&#xff0c;请选择StringBuilder(str).reverse()API。出于学习的目的&…

xstream xml模板_XStream – XStreamely使用Java中的XML数据的简便方法

xstream xml模板有时候&#xff0c;我们不得不处理XML数据。 而且大多数时候&#xff0c;这不是我们一生中最快乐的一天。 甚至有一个术语“ XML地狱”描述了程序员必须处理许多难以理解的XML配置文件时的情况。 但是&#xff0c;不管喜欢与否&#xff0c;有时我们别无选择&…

python知识点智能问答_基于知识图谱的智能问答机器人

研究背景及意义 智能问答是计算机与人类以自然语言的形式进行交流的一种方式&#xff0c;是人工智能研究的一个分支。 知识图谱本质上是一种语义网络&#xff0c;其结点代表实体&#xff08;entity&#xff09;或者概念&#xff08;concept&#xff09;&#xff0c;边代表实体/…

java会了还学什么_java都学哪些内容?学完之后可以做哪些工作?

展开全部阶段一&#xff1a;揭开企业开发神秘面纱 (4周32313133353236313431303231363533e78988e69d8331333431336163)1) Web开发基础&#xff1a;HTML语言、JavaScript、CSS、DOM等2) Oracle数据库基础&#xff1a;安装、配置Oracle数据库&#xff0c;熟练掌握SQL语句3) 操作系…

Java中的RAII

资源获取即初始化&#xff08; RAII &#xff09;是Bjarne Stroustrup用C 引入的一种用于异常安全资源管理的设计思想。 感谢垃圾回收&#xff0c;Java 没有此功能&#xff0c;但是我们可以使用try-with-resources实现类似的功能。 约翰哈德斯&#xff08;John Huddles&#x…

eclipse juno_Eclipse Juno上带有GlassFish的JavaEE 7

eclipse junoJava EE 7很热。 前四个JSR最近通过了最终批准选票&#xff0c;与此同时GlassFish 4达到了升级版83。 如果您关注我的博客&#xff0c;那么您将了解NetBeans的大部分工作。 但是我确实认识到&#xff0c;那里还有其他IDE用户&#xff0c;他们也有权试用最新和最出色…

java 生成校验验证码_java 验证码生成与校验

java绘图相关类验证码工具类package dt2008.util;import javax.imageio.ImageIO;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.awt.*;import java.awt.image.BufferedImage;import java.io.IOException;import ja…

红黑树中nil结点_什么是红黑树?程序员面试必问!

点击上方java小组&#xff0c;选择“置顶公众号”优质文章&#xff0c;第一时间送达当在10亿数据中只需要进行10几次比较就能查找到目标时&#xff0c;不禁感叹编程之魅力&#xff01;人类之伟大呀&#xff01; —— 学红黑树有感。终于&#xff0c;在学习了几天的红黑树相关的…

杰克逊JSON解析错误-UnrecognizedPropertyException:无法识别的字段,未标记为可忽略[已解决]...

在解析从我们的一个RESTful Web服务接收到的JSON字符串时&#xff0c;我收到此错误“线程“ main”中的异常com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException&#xff1a;无法识别的字段“人”&#xff08;类Hello $ Person&#xff09;&#xff0c;不是标记…

mysql2008数据库配置_SQL Server 2008 R2 超详细安装图文教程

这篇文章主要介绍了SQL Server 2008 R2 超详细安装图文教程,需要的朋友可以参考下一、下载SQL Server 2008 R2安装文件二、将安装文件刻录成光盘或者用虚拟光驱加载&#xff0c;或者直接解压&#xff0c;打开安装文件&#xff0c;出现下面的界面安装SQL Server 2008 R2需要.NET…

hdfs读写流程_深度探索Hadoop分布式文件系统(HDFS)数据读取流程

一、开篇Hadoop分布式文件系统(HDFS)是Hadoop大数据生态最底层的数据存储设施。因其具备了海量数据分布式存储能力&#xff0c;针对不同批处理业务的大吞吐数据计算承载力&#xff0c;使其综合复杂度要远远高于其他数据存储系统。因此对Hadoop分布式文件系统(HDFS)的深入研究&a…

mysql隔离级别验证_MySQL事务隔离级别以及验证

查询初始数据开启A事务  并做更新操作再另一端 B开始另一个事务查询 事务级别设置为读未提查询到事务未提交的数据 a的count修改为3 但是没有提交2 第二个级别 读已提交 避免脏读问题 但是有不可重复读问题回滚数据 修改隔离级别 确保都是 读已提交级别客户端A客户端B验证 脏…

注意力机制可视化_目标跟踪中的(STAM)时空注意力机制

目标跟踪分为单目标跟踪和多目标跟踪&#xff0c;单目标跟踪较为简单&#xff0c;这里我们只讨论多目标跟踪。多目标跟踪的遮挡问题多目标跟踪时特别容易发生目标间的相互遮挡&#xff0c;从而导致严重的预测偏移问题&#xff0c;如下图所示&#xff1a;红色框的行人在和蓝色框…

js给标签添加属性和值_jquery节点属性

一.节点操作1.DOM内容节点操作&#xff1a;​ ①innerHTML属性&#xff1a;设置或获取文本的内容&#xff08;普通文本和标签&#xff09;。​ ②innerText属性&#xff1a;设置或获取文本的内容&#xff08;普通文本&#xff09;&#xff0c;存在兼容性问题。2.jQuery内容节点…

sci translate好用吗_228个学科分类对应12000+本SCI和SSCI期刊,总有你要的那款!

最近有很多小伙伴询问选刊的问题&#xff0c;而且都是非常具体的学科方向&#xff0c;我们的小编虽然非常热心且礼貌的回答“近期安排”&#xff0c;但其实我们也感觉到鸭梨山大:根据WOS最新一期&#xff08;2020/9/21&#xff09;名单公布&#xff0c;WOS目前总共收录了12266本…

arrays.sort(._Arrays.sort与Arrays.parallelSort

arrays.sort(.我们都使用Arrays.sort对对象和原始数组进行排序。 此API在下面使用合并排序或Tim排序对内容进行排序&#xff0c;如下所示&#xff1a; public static void sort(Object[] a) {if (LegacyMergeSort.userRequested)legacyMergeSort(a);elseComparableTimSort.sor…

适用于Idea的面向现代TDD的Java 8 JUnit测试模板(带有Mockito和AssertJ)

使用类似BDD的语法&#xff0c;Java 8和Mockito-AssertJ二重奏为Idea调整JUnit测试类模板。 本文涵盖的主题似乎很简单。 但是&#xff0c;根据我的培训师经验&#xff0c;我知道&#xff08;不幸的是&#xff09;这不是常见的做法。 因此&#xff0c;我决定写这篇简短的博客文…

Java编程字符逆序输出_用JAVA编写一程序:从键盘输入多个字符串到程序中,并将它们按逆序输出在屏幕上。...

展开全部代码如下&#xff1a;import java.util.Scanner;public class ScannerDemo{public static void main(String[] args) throws Exception{Scanner scannew Scanner(System.in);System.out.println("请输入内容&#xff1a;");String strscan.nextLine();char[]…

julia与python对比_有人说Julia比Python好,还给出了5个理由

选自medium作者&#xff1a;Emmett Boudreau机器之心编译参与&#xff1a;杜伟、张倩、肖清本文作者从速度、通用性、多重派发、适用于 ML 的程度和包管理器 5 个方面阐述了 Julia 语言相较于 Python 的优势所在。Julia 是一种多范式的函数式编程语言&#xff0c;用于机器学习和…

linkedhashmap获取第n个元素_机试真题分享——交换链表前后第K个元素

题目描述给定一个编码链表和一个加密条件K&#xff0c;对编码进行加密。加密规则&#xff1a;把编码从前往后开始数第K个元素和从后往前数第K个元素进行交换。注意&#xff1a;编码的长度为0.第一个编码的序号是1.示例&#xff1a;输入&#xff1a;[1 2 3 4 5 6] 2输出&#xf…