如何用Java编写类似C的Sizeof函数

如果您刚开始学习Java并且是C语言背景,那么您可能已经注意到Java和C编程语言之间存在一些差异,例如String是Java中的对象,而不是NULL终止的字符数组。 同样,Java中没有sizeof()运算符。 所有原始值都有预定义的大小,例如int是4个字节,char是2个字节,short是2个字节,long和float是8个字节,依此类推。 但是,如果您缺少sizeOf运算符,那为什么不让它成为编码任务呢? 如果确定,那么您的下一个任务是用Java写一个方法,该方法的行为类似于C的sizeOf()运算符/函数,并为每种数字基本类型(即除Boolean之外的所有基本类型)返回以字节为单位的大小。

你们中许多人认为,为什么我们不包括布尔值? 难道它只需要1位代表真假值? 好吧,我不在本练习中包括布尔值,因为布尔值大小在Java规范中没有严格定义,并且在不同的JVM之间有所不同。

另外,据您所知, Java中原语的大小是固定的,它与平台无关。

因此,在32位和64位计算机上,int基本变量在Windows和Linux中都将占用4个字节。

无论如何,这是Java中不同基本类型的大小和默认值供您参考:

大小

现在由您的创造力来给出多个答案,但是我们至少需要一个答案来解决此编码问题。 如果你们喜欢这个问题,那么我可能会将其列入75个可以破解任何编程工作面试的编码问题列表中,如果这有趣且具有挑战性,请写下笔记。

Java sizeof()函数示例

这是我们实现sizeof运算符的完整Java程序。 它的大小不完全相同,但目的是相同的。 sizeof返回特定数据类型占用的内存,而此方法正是这样做的。

/*** Java Program to print size of primitive data types e.g. byte, int, short, double, float* char, short etc, in a method like C programming language's sizeof** @author Javin Paul*/
public class SizeOf{public static void main(String args[]) {System.out.println(" size of byte in Java is (in bytes) :  "+ sizeof(byte.class));System.out.println(" size of short in Java is (in bytes) :" + sizeof(short.class));System.out.println(" size of char in Java is (in bytes) :" + sizeof(char.class));System.out.println(" size of int in Java is (in bytes) :" + sizeof(int.class));System.out.println(" size of long in Java is (in bytes) :" + sizeof(long.class));System.out.println(" size of float in Java is (in bytes) :" + sizeof(float.class));System.out.println(" size of double in Java is (in bytes) :" + sizeof(double.class));}/** Java method to return size of primitive data type based on hard coded values* valid but provided by developer*/public static int sizeof(Class dataType) {if (dataType == null) {throw new NullPointerException();}if (dataType == byte.class || dataType == Byte.class) {return 1;}if (dataType == short.class || dataType == Short.class) {return 2;}if (dataType == char.class || dataType == Character.class) {return 2;}if (dataType == int.class || dataType == Integer.class) {return 4;}if (dataType == long.class || dataType == Long.class) {return 8;}if (dataType == float.class || dataType == Float.class) {return 4;}if (dataType == double.class || dataType == Double.class) {return 8;}return 4; // default for 32-bit memory pointer}/** A perfect way of creating confusing method name, sizeof and sizeOf* this method take advantage of SIZE constant from wrapper class*/public static int sizeOf(Class dataType) {if (dataType == null) {throw new NullPointerException();}if (dataType == byte.class || dataType == Byte.class) {return Byte.SIZE;}if (dataType == short.class || dataType == Short.class) {return Short.SIZE;}if (dataType == char.class || dataType == Character.class) {return Character.SIZE;}if (dataType == int.class || dataType == Integer.class) {return Integer.SIZE;}if (dataType == long.class || dataType == Long.class) {return Long.SIZE;}if (dataType == float.class || dataType == Float.class) {return Float.SIZE;}if (dataType == double.class || dataType == Double.class) {return Double.SIZE;}return 4; // default for 32-bit memory pointer}
}Output:
size of byte in Java is (in bytes) :  1
size of short in Java is (in bytes) :2
size of char in Java is (in bytes) :2
size of int in Java is (in bytes) :4
size of long in Java is (in bytes) :8
size of float in Java is (in bytes) :4
size of double in Java is (in bytes) :8

这就是编写sizeof就像Java中的方法一样的编程工作。 这实际上很棘手,因为您不会考虑利用Java数据类型的预定义大小,也不会考虑利用
包装类中定义的SIZE常数,例如Integer或Double。 好吧,如果您可以通过其他任何方式找到原始数据类型的大小,请告诉我们。

翻译自: https://www.javacodegeeks.com/2018/06/sizeof-function-java.html

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

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

相关文章

【C++编程题2】字符串插入空格

题目 从键盘输入一个字符串,然后按照下面要求输出 从键盘输入一个字符串,然后按照下面要求输出一个新字符串:新串是在原串中的每两个字符之间插入一个空格,如原串为 abcd,则新串为a口b口c口d口(口表示空格…

Spring启动教程

1.简介 如果您一直想使用一个Web框架,它使您能够快速开始API开发,而无须设置Web服务器,收集所有有线依赖项,安装各种工具的麻烦,那么您将拥有一个出色的框架,即Spring开机 Spring Boot的主要座右铭是约定优…

【LDPC系列1】基于MATLAB中LDPC编译码器对象的图像传输通信系统仿真

关注公号【逆向通信猿】更精彩!!! 1. 构造编码器对象 采用MATLAB内置的comm.LDPCEncoder构造编码器对象,其中使用默认的校验矩阵,信息位长32400比特,码长64800比特,该校验矩阵中除第一行中1的个数为6个外,其余行中1的个数均为7;前12960列中1的个数为8,后32400列构成…

【LDPC系列2】基于MATLAB中LDPC编译码器对象的图像传输通信系统仿真(IEEE 802.16e标准协议基础矩阵)

关注公号【逆向通信猿】更精彩!!! 1. 构造校验矩阵H,并保存为mat文件 采用IEEE 802.16e标准协议中的基础校验矩阵 通过构造QC-LDPC校验矩阵,码长n=2304,信息长k=1152,码率r=1/2,基础矩阵维数为1224: Hb = [-1 94 73 -1

.xhr长轮询_使用Spring 3.2的DeferredResult进行长轮询

.xhr长轮询在我们的最后一集中 , Agile Cowboys Inc.的首席执行官刚刚雇用了Java / Spring顾问,方法是为他提供最初为女友购买的保时捷。 这位首席执行官的女友因失去保时捷而感到不安,已将其婚外恋告诉了他的妻子。 他的妻子在分拆了CEO的套…

十进制数与八进制数互相转换(MATLAB和C版本)

一、八进制数转十进制数 C语言实现 实现思路和参数: /* Function: ConvertOctaltoDecimal* Abstract: Convert an octal number to its equivalent decimal value** - First compute the number of digits in the octal number* - Then perform the conversion, one …

Java正成为COBOL的一部分-它将成为COBOL的一部分吗?

任何从大学,技术学校或社区学院毕业的计算机科学专业都接受过培训。 每个身材高大的公司都使用该语言,并拥有一批具备此能力的程序员。 通用语言可以推动业务发展。 1985年是COBOL。今天是Java。 尽管存在差异,但这两种语言在行为轨迹上都具…

VS2010附加进程调试DLL时断点无法断下的解决方法

系统版本:Win10 x64 1809 VS版本:VS2017 企业版 问题一 在动态链接库(DLL)附加到进程调试时,用VS2017附加后单步调试,结果发现总是在调试过程中卡死,VS2017无响应; 解决办法是:强制结束VS2017…

MATLAB库函数polly2trellis(卷积码生成多项式转网格图描述)的实现过程详解

关注公号【逆向通信猿】更精彩!!! 生成多项式转网格图 在MATLAB中,卷积码的维特比(Viterbi)译码实现通常需要先将生成多项式转换成网格图描述,然后才能利用网格图进行维特比译码 生成多项式转网格图描述的built-in函数为poly2trellis,在MATLAB中,改函数为通信工具箱…

java反射api研究_深入研究Java 8中的可选类API

java反射api研究作为Java程序员,我们所有人都经历了以下情况:我们调用一个方法来获取某个值,然后代替直接对返回值调用某些方法,我们首先必须检查返回值是否不为null,然后在返回值。 这是像Guava这样的外部API试图解决…

【卷积码系列1】(n,k,m)卷积码的编码原理详解及MATLAB实现

关注公号【逆向通信猿】更精彩!!! 原理 编码电路图 ( n , k , m ) (n,k,m) (n,k,

用于SaaS和NoSQL的Jdbi

一个自然的接口,用于与CRM,ERP,会计,营销自动化,NoSQL,平面文件等基于Java的数据集成 Jdbi是Java的SQL便利库,它为JDBC提供更自然的Java数据库接口,该接口易于绑定到域数据类型。 该…

【卷积码系列2】(n,k,m)卷积码的生成多项式矩阵系数转网格图描述(不使用MATLAB库函数)

关注公号【逆向通信猿】更精彩!!! 回顾 之前关于(3,1,3)卷积码的维特比译码仿真写过一篇文章(基于C语言实现): 卷积码Viterbi译码算法基本原理及C语言实现 文中从概率的角度出发,对卷积码的基于硬判决和软判决维特比译码原理进行了阐述,最后以(3,1,3)系统卷积码为例…

【卷积码系列3】(n,k,m)卷积码的维特比译码实现(不使用MATLAB库函数)及性能对比(vitdec函数不使用MATLAB库函数【全部代码需私信另外付费获取】)

理论基础 MATLAB库函数polly2trellis(卷积码生成多项式转网格图描述)的实现过程详解 上面这篇仅作为了解!!! 【卷积码系列1】(n,k,m)卷积码的编码原理详解及MATLAB实现 【卷积码系列2】(n,k,m)卷积码的生成多项式矩阵系数转网格图描述(不使用MATLAB库函数) 维特比译码曲…

【数字信号处理】基于DFT的滤波系列1

一、引言 离散傅立叶变换(DFT)是很多数字信号处理(DSP)层面的核心,因此我们从这块开始。 我们首先快速回顾一下 DFT 的一些要点。 该模块这一部分的完整内容列表是: DFT 回顾 – 实数和复数形式一维(例如时间序列)数据的 DFT 滤波DFT 滤波的非理想行为窗口化二维图像的D…

udt java_Java DB中的Java用户定义类型(UDT)

udt javaJava DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 用户定义类型(UDT)是Java类,其实例(对象)存储在数据库表列中。 U…

【自适应盲均衡9】基于判决反馈的多径衰落信道的盲均衡与MATLAB仿真(CMA-DFE)

关注公号【逆向通信猿】更精彩!!! 关于基于常模准则的盲均衡(即CMA)的基础知识,首先可参考本人博客 【自适应盲均衡2】多径衰落信道的复数常模算法(CMA)的理论推导与MATLAB仿真 引言——判决反馈均衡器(DFE)的引入 线性FIR均衡器一直作为克服信道失真的主要手段。它对…

Java批处理教程

在当今世界,互联网已经改变了我们的生活方式,其主要原因之一是大多数日常琐事都使用互联网。 这导致可用于处理的大量数据。 其中涉及大量数据的一些示例是处理工资单,银行对帐单,利息计算等。因此,请设想一下&#x…

【自适应盲均衡10】基于判决引导(Decision Directed)的多径衰落信道双模式盲均衡算法与MATLAB仿真(DD-CMA)

关注公号【逆向通信猿】更精彩!!! 引言 判决反馈均衡器(Decision Feedback Equalizer, DFE)虽然能够避免线性FIR均衡器的噪声增强,适用于具有深度谱零点的信道均衡;但是容易产生误收敛情况,针对该问题有人提出了预测判决反馈均衡器(PDFE),这个后续再说。 此次要讨论…

【数字信号处理】基于DFT的滤波系列2(含MATLAB代码)

关注公号【逆向通信猿】更精彩!!! 三、时频域的“数” 在该节的大部分内容中,我们将使用无量纲数字序列的数据。然而,对于现实世界的数据,这些数字将具有基础单位。在本节中,将解释时域和频域之间的联系。 假设有N个采样频率为 f s f_s f