5分钟带你从数据类型了解Java相比C/C++有什么优势

2023-05-16

数据类型是一门语言的血肉,通过这5分钟的浏览,只学过C/C++的小伙伴会初步了解Java的一些特性,学过一点Java的朋友在读完这篇文章后也一定会对Java的语法规范有更深刻的了解

Java数据类型分为两大类,一类为基本数据类型,包含了int、char等八种数据类型,另一类为引用数据类型(该类型我们暂且不讨论)

首先先让我们看看Java的八种数据类型有哪些:

可移植性

想必大家都知道C/C++的数据类型大小在不同机器、不同编译器上都会有些许的差异,例如在32位电脑上和64位电脑上long的大小就不同,这就导致同样的代码在64位上可以正常运行,但放到32位计算机上就可能会出现溢出等情况。

但Java完全不会有这种顾虑,无论是32位还是64位,所有数据类型大小都是相同的,这就大大减轻了程序员移植代码的难度。

健壮性

在学过C和C++之后再来学Java,我很明显感觉到Java是一门很“矫情”的语言

如果在程序员面前C/C++是

 那在程序员面前Java就是。。

想必C/C++的小伙伴都见过这样的代码

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	int i = -10;
	unsigned int ui = 10;
	
	if (ui > i) 
        cout << "yes" << endl;//printf("yes\n");
	else 
        cout << "no" << endl;//printf("no\n");
}

结果为no,道理应该大家都知道,这是因为在(ui>i)时,i被隐式转化为了unsigned类型,由补码反码的知识我们知道-10用unsigned表示是4294967286,道理很简单。但是在项目中你很可能因为一个走神写下了这样的错误,导致程序能正常编译,运行结果却和预料的结果大相径庭(大家应该都有花半个小时甚至一个上午找这种“小”BUG的经历吧。。)

但在Java中,无符号类型直接被砍掉了,没错这样直接根除无符号类型的BUG。。

其实我觉得在这里我很支持Java,因为unsigned存在的价值本身就不大,与signed只是一个二倍的关系。范围没大多少,但使用错误的后果却是极大的,除了上面的代码之外还有下面这种常见无符号BUG:

unsigned int ui=1;
cout<<ui-2<<endl;

最后的输出就是一个很大的数。

除此以外,Java对变量的常数赋值也做了很多限制,例如:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	char c = 888888;
	cout << c << endl;
}

在C/C++这串代码就能正常运行,C/C++编译器默认你知道数字会溢出,知道数据会被截断,因此并没有报错,最多是给你一些警告。

但在Java中这样写。。

 是的,直接无法编译,因为byte最大值为127,130已经超过了byte的范围。

除此以外Java中还不允许出现把表示大范围的数赋值给小范围数的情况,如下:

等一下!有什么奇怪画面出现了!

与C/C++顺从不同,直接硬上Java是不愿意的,那么如何让Java乖乖听话呢,那当然是用一些工具胁迫他啦,嘿嘿嘿。。。

没错,就是显示类型转化!(要不然还能是什么?)

public class Test {
    public static void main(String[] args) {
        int a=1;
        byte b=(byte)a;
        System.out.println(b);
    }
}

切记!

一个数据能否赋值取决于该类型的表示范围,而不是内存大小,把short类型的数据给char(在Java中char为两个字节)也是不行的!!!因为short可以表示负数,而char不可以!

到了这里你应该已经理解了Java的健壮性是如何而来的了。

那么这里我再给大家看看一些有趣的代码(Java程序员看过来!)

public class Test {
    public static void main(String[] args) {
        byte a=1;
        byte b=2;
        byte c=a+b;
        System.out.println(c);
    }
}

答案理所应当输出3对吧!

但很可惜并不是,因为这段代码根本不能成功编译。。。

 原因就在于在进行该运算时,byte发生了整型提升(不知道整型提升的可以在CSDN搜一下相关博客)传送门

因此在这里c接收到的其实是一个int大小的数据,大范围不能给小范围变量赋值,所以报错了。

高效率

在Java中,每一个基本数据类型都有一个包装类,如下图

 在包装类中封装了对该类型的一些常用操作,以int为例

public class Test {
    public static void main(String[] args) {
        int a=1;
        int b=2;
        System.out.println(Integer.MAX_VALUE);//获取整型最大值2147483647
        System.out.println(Integer.max(a,b));//a和b的max 2
        System.out.println(Integer.reverse(a));//翻转数字,输出-2147483648
    }
}

类似的操作有几十种,每一个基本数据类型都有,由此可见Java写代码时的高效率。

其它区别

char

在Java中char为两个字节,这就意味这Java可以用UTF-8进行编译,也就是说汉字在Java中也可以作为字符啦!

public class Test {
    public static void main(String[] args) {
        char a='牛';
        System.out.println(a);//输出牛
    }
}

boolean

Java中bool和int是两种类型,而且无法相互转化!

像这样的代码就会报错,因为if语句要的是一个boolean类型

此外boolean没有确切的大小,这点了解即可 

写文不易,博主最近刚开始学习Java,关注我,后面还有更多Java好文哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5分钟带你从数据类型了解Java相比C/C++有什么优势 的相关文章

  • OpenMV:23串口发送数据

    文章目录 产品Hello World简单的数据发送 本节讲解 如何使用OpenMV通过串口来发送数据 OpenMV 是可以直接通过串口发送字符串的 为什么要用串口呢 xff1f 因为要时候需要把信息传给其他MCU xff08 单片机 xff
  • HTTP AUTH验证

    何为http auth http auth是一种基础的用户验证 xff0c 原理是将用户名 密码base64加密后放在http的请求头部Authorization 发给服务器 浏览器的做法 当你访问一个需要http auth验证的资源时 x
  • OpenMV与Arduino通信—串口

    文章目录 96 Arduino 96 的串口函数接收函数 96 Serial read 96 检测串口 96 Serial available 96 串口通信例程 96 OpenMV 96 代码 96 Arduino 96 代码 所有要进行
  • OpenCV:08图像金字塔

    目录 图像金字塔图像金字塔介绍高斯金字塔 xff08 Gaussian pyramid xff09 向下采样向上采样 拉普拉斯金字塔 图像直方图图像直方图的基本概念直方图术语使用 96 OpenCV 96 统计直方图使用 96 OpenCV
  • OpenCV:09车辆统计项目

    车辆统计项目 涉及到的内容大体流程知识补充背景减除 具体流程视频加载去除背景形态学识别车辆对车辆进行统计显示车辆统计信息 效果图 xff1a 涉及到的内容 窗口的展示图像 视频的加载基本图像的绘制 车辆识别 基本图像运算与处理形态学轮廓查找
  • OpenCV:10特征检测

    特征检测的基本概念 特征检测是计算机视觉和图像处理中的一个概念 它是指使用计算机提取图像信息 xff0c 决定每个图像的点是否属于一个图像特征 特征检测的结果是把图像上的点分为不同的子集 xff0c 这些子集往往属于孤立的点 连续的曲线或者
  • Android-自定义圆形ProgressBar加载

    帮朋友做个圆形加载进度条 xff0c 后来发现做的挺简单的 xff0c 大佬一个比一个厉害 介绍一下 xff1a 1 自定义View属性 2 View 的测量 3 计算绘制 View 所需参数 4 圆弧的绘制及渐变的实现 5 文字的绘制 效
  • VINS-MONO的安装与运行

    1 安装ros 网上大量教程 2 安装ceres 1 14 0版本 源码安装 xff0c 有依赖 xff09 安装mkdir build cd build cmake make sudo make install xff08 亲测2 0版本
  • STM32F1--FreeRTOS系统学习(二):任务创建与删除(动态)

    以下内容皆是个人学习过程中的总结 xff0c 记录一下整个过程 xff0c 用于后期复习 xff0c 如有不对之处 xff0c 麻烦各位大佬指出 xff08 喜欢的朋友麻烦点个关注 后期还会进行持续更新 xff09 在FreeRTOS 中应
  • ::在c++中含义

    34 34 在C 43 43 中表示作用域 xff0c 和所属关系 34 34 是运算符中等级最高的 xff0c 它分为三种 xff0c 分别如下 xff1a 一 作用域符号 xff1a 作用域符号 的前面一般是类名称 xff0c 后面一般
  • Keil4打开单片机工程一片空白,cpu100%程序卡死的问题解决

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言 xff1a 问题描述一 原因二 解决办法1 问题图片2 解决办法 xff1a 删除部分文件 总结 前言 xff1a 问题描
  • CAN协议扩展帧ID

    例如 ID xff1a 0x18102701 扩展帧ID共29位 准换为二进制0001 1000 0001 0000 0010 0111 0000 0001 29位110代表优先级十进制6 xff0c PF十进制16 xff08 16进制0
  • STM32的USART中RTS、CTS的作用和意义

    USART中RX和TX这两个引脚的功能 xff0c 这两个引脚是USART串行通信最常见和必不可少的两个引脚 但我们在手册中会发现关于USART的其他引脚 xff1a USART CK USART RTS USART CTS xff0c 如
  • 步骤一:Jetson Nano安装ROS步骤,及相关错误分析

    安装系统为 xff1a ubantu 18 04 ros melodic 硬件 xff1a jetson nano b01 xff0c 联想拯救者r7000p 内存卡 xff1a SAMSUNG 128G 最后一次更新2022 10 5 亲
  • 步骤三:PX4,Mavros的下载安装及代码测试

    1 安装Mavros sudo apt install ros melodic mavros ros melodic mavros extras 2 安装Mavros相关的 geographiclib dataset 此处已经加了ghpro
  • 步骤五:PIXHAWK遥控器的使用

    采用福斯i6s遥控 1 连接飞控 打开遥控器 xff0c 接收机插上飞控 xff0c 再插上送的短接线 xff0c 进行匹配对码RX 2 遥控器长按两秒锁 xff0c system output mode Output mode按照图片这样
  • 步骤七:激光雷达的驱动安装与建图使用

    大致的步骤可以按照官网来 nbsp Cartographer SLAM for Non GPS Navigation Dev documentation ardupilot org 但是官网的步骤有严重的问题 问题1 报错 libabsl
  • 步骤八:PX4使用cartographer与move_base进行自主建图导航

    首先老样子硬件如下 飞控 HOLYBRO PIXHAWK V4 PX4 机载电脑 jetson nano b01 激光雷达 思岚a2 前提 你已经完成了cartographer建图部分 能够正常输出map话题 前言 由于要参加中国机器人大赛
  • 最详细的流媒体传输协议-rtsp协议详解

    流媒体传输协议 rtsp协议详解 参阅 RTSP协议详解和分析从零开始写一个RTSP服务器 xff08 一 xff09 RTSP协议讲解关于RTSP RTP RTCP协议的深刻初步介绍 rtsp RTSP出现以前 xff0c 最热的大概就是
  • 利用FFmpeg合并音频和视频

    一 FFmpeg 多个音频合并的2种方法 多个mp3文件合并成一个mp3文件 一种方法是连接到一起 ffmpeg64 exe i 34 concat 123 mp3 124 mp3 34 acodec copy output mp3 解释

随机推荐

  • 流媒体服务器之 ZLMediaKit介绍

    流媒体服务器是流媒体应用的核心系统 xff0c 是运营商向用户提供视频服务的关键平台 流媒体服务器的主要功能是对流媒体内容进行采集 缓存 调度和传输播放 流媒体应用系统的主要性能体现都取决于媒体服务器的性能和服务质量 因此 xff0c 流媒
  • WebRTC 教程三:WebRTC特性,调试方法以及相关服务器搭建方法

    WebRTC 教程一 xff1a WebRTC信令 架构和 API 入门 WebRTC 教程二 xff1a WebRTC API 和 Leak 本文是 WebRTC 的第三篇教程 xff0c 主要介绍了 WebRTC 的一些特性 xff0c
  • 能不能在头文件中定义全局变量?

    首先 xff0c 这是一篇科普文 xff0c 所以 比较杂 xff0c 我尽量写清楚一些 1 ANSI C标准是什么 xff1f GNU又是什么 xff1f ld是什么 xff1f ANSI C是C语言的标准规范 xff0c 是国际标准化组
  • FFmpeg转码流程详解

    前言 音视频转码主要指这样的概念 xff1a 容器格式的转换 xff0c 比如MP4转换为MOV 容器中音视频数据编码方式转换 xff0c 比如H264编码转换成MPEG4编码 xff0c MP3换为AAC 音视频码率的转换 xff0c 比
  • FFmpeg 代码实现流媒体推流(RTSP)

    实时录屏并把视频推流到RTSP服务器 xff0c 具体流程是抓取屏幕内容 bitmap xff0c 并把bitmap转化为YUV xff0c 接着把YUV编码成H264 xff0c 再把H264码流推到RTSP服务器 xff1b 把采集到的
  • rtsp协议的理解

    一 rtsp协议概述 RTSP xff08 Real Time Streaming Protocol xff09 实时流传输协议 xff0c 是TCP IP协议体系中的一个应用层协议 该协议定义了一对多的应用程序如何有效地通过IP网络传送多
  • QT 程序打包的方法

    01前言 很多朋友因为要把程序放到不同电脑的环境去测试 xff0c 而又不可能每一台电脑都安装了QT的开发环境 xff0c 于是乎有了将程序打包的想法 这里用来的包的工具是windeployqt xff0c 是QT官方自带的打包软件 xff
  • C++Qt开发——事件处理函数

    事件 event 是由系统或者Qt本身在不同时刻发出的 当用户按下鼠标 敲下键盘 xff0c 或者其它情况时候都会发出一个相应的事件 一些事件在对用户操作做出相应时发出 xff0c 如键盘事件等 xff1b 另外一些则是由系统自动发出 xf
  • C++Qt开发——类图结构

    Qt 类图 系统性地总结一下相关的知识点 xff0c 这里有个网图 xff0c 是Qt的类图 xff0c 看完可以对Qt整体的框架有一个大致的了解 xff0c 具体如下 CSDN QT大纲 xff1a Qt开发必备技术栈学习路线和资料 Qt
  • QT如何实现一个五子棋游戏

    FIR pro QT 43 61 core gui TARGET 61 FIR TEMPLATE 61 app SOURCES 43 61 main cpp widget cpp HEADERS 43 61 widget h wight h
  • Qt5实现UDP通信的示例代码怎么写

    QT5实现UDP通信的示例代码怎么写 xff0c 很多新手对此不是很清楚 xff0c 为了帮助大家解决这个难题 xff0c 下面小编将为大家详细讲解 xff0c 有这方面需求的人可以来学习下 xff0c 希望你能有所收获 前言 该例程经过实
  • OpenCV+Qt实现图像处理操作工具

    一 目标 Qt界面实现 雪花屏 高斯模糊 中值滤波 毛玻璃 灰度化 XY方向模糊 双边模糊 腐蚀 图像处理操作 要求左边原图 xff0c 右边效果图 结果展示如下 xff1a 图像处理实现有点多 xff0c 就不一个一个地展示了 xff0c
  • 链表的建立、赋值、输出、查找、增、删

    include lt stdio h gt include lt string h gt include lt math h gt include lt stdlib h gt typedef struct node 定义结构体 int n
  • 蓝桥杯-串口

    本文通过电脑串口发送文本模式和HEX模式进行介绍串口的简单使用 xff01 注意事项 xff1a 1 本节通过定时器2的串口1 进行串口控制 2 串口如果开启了 编程完成后自动打开串口会导致第一次发送无法看到 xff08 HEX模式 xff
  • GSV2008

    GSV2008 是HDMI2 0 四进二出矩阵 xff0c 自持HDCP2 2 xff0c 支持DOWN SCALER 四个HDMI输入 xff0c 2个HDMI输出 xff0c 自动EQ 应用 xff1a 1 xff0c 功放 ARC C
  • 漏洞挖掘-从任意文件读取漏洞到获取账户利用

    开篇 大家好 xff0c 我是承影战队的v1ct0ry xff0c 这次我为大家分享一次比较有趣的漏洞挖掘经历 这次挖掘过程是以灰盒挖掘为主要思想进行展开 xff0c 不熟悉的读者可以阅读上篇文章熟悉一下 一 任意文件读取 开局我们通过扫描
  • curl命令行工具

    转载 curl 命令行工具的使用及命令参数说明 curl的使用 1 1 URL访问 1 2 表单提交 1 3 其它HTTP请求方法 1 4 文件上传 1 5 HTTPS支持 1 6 添加请求头 1 7 Cookie支持curl语法及选项cu
  • Ubuntu20.4安装ROS系统教程(自用)

    1 Ubuntu各个版本系统对应的ROS版本 1 2Ubuntu16 04与ROS kinetic的安装 1 2 1Ubuntu16 04配置 1 2 2安装ROS kinetic版 1 3Ubuntu18 04和ROS melodic的安
  • UART 空闲中断+DMA接收流程

    在项目中利用UART空闲中断接收外部信号 xff0c 利用DMA接收 xff0c 实现外部到内存的传输 通过分析其它文章的代码 xff0c 大概如下 xff1a span class token comment 配置 DMA Stream
  • 5分钟带你从数据类型了解Java相比C/C++有什么优势

    数据类型是一门语言的血肉 xff0c 通过这5分钟的浏览 xff0c 只学过C C 43 43 的小伙伴会初步了解Java的一些特性 xff0c 学过一点Java的朋友在读完这篇文章后也一定会对Java的语法规范有更深刻的了解 Java数据