数据类型和变量

1.数据类型

在Java中数据类型主要分为两类:基本数据类型和引用数据类型。

基本数据类型有四类八种: 1. 四类:整型、浮点型、字符型以及布尔型

2.八种:

 整形是分为如上四种 byte short int  long

 浮点型分为 float 和double 

其中需要特别注意的是  byte内存占用为1字节   char内存占用为2字节。和我们之前c语言中学到的很不一样。

需要注意的点 

1.不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节。其他数据类型也同理(可以说这不像c语言一样,其java是可移植的,无论在哪个系统,其数据类型所占字节都是固定的

2.在java中整形和浮点型都是有符号的,不存在无符号。(跟c的区别,c有无符号和有符号之分,更加复杂)

3.整型默认为int型,浮点型默认为double

4字符串属于引用类型,该中类型后序介绍。  

2.变量 

对于java来说 ,其为了安全性 ,变量在使用前是需要定义好值的,否则如果没定义好值就使用会导致编译期间报错。(这在c语言里是不可能的,C语言就算变量未定义也是可以使用的)

 对于给变量赋值,其值一定不要超出其变量取值范围

1.整形 

特殊说明:在整形中,长整型变量(long)的初始值后要加L或者l,推荐加L。 (其他整形变量都没这个要求)

2.浮点型

int a = 1;
int b = 2;
System.out.println(a / b); //输出0

跟c语言一样。在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分),。如果想得到 0.5, 需要使用 double 类型计算.  

double a = 1.0;
double b = 2.0;
System.out.println(a / b);   // 输出0.5

 double float 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。这个叫做精度损失,之前在c语言中讲过。

所以会出现以下代码,就是精度损失的一个很好的例子。

double num = 1.1;
System.out.println(num * num);  // 输出1.21吗?// 执行结果
1.2100000000000002

因为java更注重安全性,所以对于将float初始化,需要将其浮点型常量后面加个f或者F,否则会报错(c语言并不会报错)

float num = 1.0f;    // 写作 1.0F 也可以

由于float表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float. 

3.字符型 

 Java 中使用 单引号 + 单个字母 的形式表示字符。

无论是哪种语言,计算机中的字符本质上都是属于整数. 在 C 语言中使用 ASCII 表示字符, 而 Java中我们使用Unicode表示字符.

unicode表包含ascall表,unicode表能表示范围更大。

unicode中一个字符占用两个字节,所以可以表示的字符种类更多, 包括中文.

char ch = '呵';
System.out.println(ch);

4.布尔类型 

boolean 类型的变量只有两种取值, true 表示真, false 表示假

Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.(强制转换双方都不能进行)

(c语言中bool能与int类型相互转换,所以0能隐式转换为true,其他数字能隐式转换为false,)

Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令 

 3.类型转换

 Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有较严格的校验.而跟c语言对比来说,c语言的类型转换规则就显得很宽松,很容易就能类型转换。

自动类型转换(隐式)

 自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时才会自动转换。(特殊情况不遵循,如下)

(c语言的隐式转换更简单,无论是小转换为大还是大转换为小都可以)

当给变量赋常量值时,其隐式转换并不符合上述所说,它的隐式转换有自己的规矩,其规则我们在上面已经说过了,再说一遍。

将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查。

byte,short只要填整数常量就行,它会自动隐式整换。int填整数常量。 long需要整数常量后加个L如101L.   float在赋值时需要后面加个f如1.14f 。double只要正常浮点数就行.

 强制类型转换(显式)

c语言已经讲的很清楚,这里不详细展示 

强制类型转换不一定能成功,不相干的类型依旧不能互相转换 ,如在java中boolean和int之间不能强制转换(c语言当然可以)

4.类型提升 

如果参与计算的都是低于等于4字节大小的数据类型,就会将其提升到四字节类型再计算。原因是由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于 4 个字节的类型, 会先提升成 int, 再参与计算.  

如果有大于4个字节类型的数据参与计算,如long,则就全隐式转换为long类型再计算。

下面给几个例子

 

所以这就是java的类型提升。

其实对于类型转换和类型提升这两个概念在c语言就讲过了,只不过java跟c语言在这两方面上还是有差别的,所以要重新讲。

5.字符串类型 

 这是c语言所没有的类型,但是c语言有指针可以代替它。

字符串类型不属于java的基本类型,属于引用数据类型。

 在Java中使用String类定义字符串类型,比如:

public static void main(String[] args) {String s1 = "hello";String s2 = " world";System.out.println(s1);System.out.println(s2);System.out.println(s1+s2);   // s1+s2表示:将s1和s2进行拼接
}

 在java中,字符串跟c语言中字符串不一样,这里结尾并不存在隐藏的\0,所以在从底层来说可以将字符串认为是数组。

 在java中字符串可以被+拼接 ,如“hello”+4=“hello4” ,10+20+“hello”=“30hello”,“hello”+10+20=“hello1020”.

 

 对于其转换方法运用了包装类型和String,该知识点比较深,就不细展开了,看一下了解下就可以了。

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

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

相关文章

【大厂AI课学习笔记NO.64】机器学习开发框架

机器学习开发框架本质上是一种编程库或工具,目的是能够让开发人员更容易、更快速地构建机器学习模型。 机器学习开发框架封装了大量的可重用代码,可以直接调用,目的是避免“重复造轮子’大幅降低开发人员的开发难度,提高开发效率…

Spring框架精髓:带你手写IoC

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

足球青训俱乐部|基于Springboot的足球青训俱乐部管理系统设计与实现(源码+数据库+文档)

足球青训俱乐部管理系统目录 目录 基于Springboot的足球青训俱乐部管理系统设计与实现 一、前言 二、系统设计 1、系统架构设计 三、系统功能设计 1、管理员登录界面 2、公告信息管理界面 3、学员管理界面 4、商品信息管理界面 5、课程安排管理界面 四、数据库设计…

ArcGIS Runtime For Android开发之符号化和图层渲染

一、用Symbol对要素进行符号化 首先我们看一下Symbol 接口关系: 1、SimpleFillSymbol 他是用来进行简单的Graphic面要素填充符号化的,它可以设置要素的填充颜色,边线颜色、线宽,其用法如下: Polygon polygonnew Po…

常用的电阻、电容的种类和应用场合?

电阻的 a.按阻值特性:固定电阻、可调电阻、特种电阻(敏感电阻),不能调节的,我们称之为固定电阻,而可以调节的,我们称之为可调电阻.常见的例如收音机音量调节的,主要应用于电压分配的,我们称之为电位器. b.按制造材料:碳膜电阻、金属膜电阻、线绕电阻,捷…

二叉树叶节点个数,根节点个数,树的深度,查找数据为x的节点

文章目录 一、计算二叉树叶节点个数二、叶节点的个数 引言:补充树的概念 节点的度:一个节点含有的子树的个数称为节点的度 叶节点或终端节点:度为0的节点称为叶节点 节点的层次:从根开始为第一层,以此类推 树的度&…

【Godot 4.2】Tree控件与TreeItem完全解析

概述 本篇是控件完全解析系列之一,主要总结一下Tree控件与TreeItem的使用。 Tree控件是一个非常强大的控件,尤其是在编写一些相关的程序或编辑器插件时,非常适合展示树形组织的节点型数据。 本篇将从简单的添加根节点,根节点子…

uniapp和vue项目配置多语言,实现前端切换语言

在uniapp中配置多语言功能,实现前端切换语言,可以按照以下步骤进行: 1. 创建语言包 首先,创建一个名为 lang 的目录,并在该目录下为每种支持的语言创建对应的JSON或JS文件。例如: lang/en.js&#xff08…

Microsoft PyRIT能自动化完成AI红队的任务

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

《异常检测——从经典算法到深度学习》26 Time-LLM:基于大语言模型的时间序列预测

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

Windows10 安装Neo4j流程

1、下载并安装ava运行环境 官网链接(需要注册Oracle账号):https://www.oracle.com/java/technologies/downloads/ 根据自己Neo4j版本确认需要的JDK版本 百度网盘链接: 链接:链接:https://pan.baidu.com/s/…

Sodinokibi勒索病毒最新变种,解密工具更新到2.0版本

Sodinokibi勒索病毒 Sodinokibi勒索病毒又称REvil,自从2019年6月1日,GandCrab勒索病毒运营团伙宣布停止运营之后,Sodinokibi勒索病毒马上接管了GandCrab的大部分传播渠道,同时它也被称为是GandCrab勒索病毒的“接班人”&#xff…

VMware 虚拟机安装windows 10操作系统

先提前准备好镜像文件 1.创建新的虚拟机 2.选择自定义,然后下一步 v Windows 建议选择2G以上,下一步 选择网络地址转换(NAT),下一步 这里可按自己的需求来分区,也可以安装好后再分区 选择立即重启&#xff…

Vue组件置底方法,ElementPlus布局

问题描述 在开发网页时使用了elementplus的el-container组件 组件里分成了main和footer两块&#xff0c;但是想要将两个按钮置底在容器底部遇到了困难 如下图所示&#xff0c;在网页开发者工具可见两个按钮与左侧的图片没有底部对齐 此时我的代码是这样 <el-footer>&…

文件底层的深入理解之文件输入输出重定向

目录 一、文件fd的分配规则 二、对输出重定向现象的理解 三、输出输入重定向的简单实现 1、输出重定向 2、输入重定向 一、文件fd的分配规则 最小的没有被使用的数组下标&#xff0c;会被分配给最新打开的文件。 二、对输出重定向现象的理解 正如上面这段代码所示&#xff0…

从零开始学习Netty - 学习笔记 -Netty入门【半包,黏包】

Netty进阶 1.黏包半包 1.1.黏包 服务端代码 public class HelloWorldServer {private static final Logger logger LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());public static void main(String[] args) {NioEventLoopGroup bossGroup new NioEventL…

Ubuntu上Jenkins自动化部署Gitee上VUE项目

文章目录 1.安装NodeJS插件2.配置全局工具配置-NodeJS环境变量3.新建自由风格的软件项目任务4.配置General配置丢弃旧的构建配置参数化构建过程 5.配置源码管理6.构建触发器7.设置构建环境8.配置构建步骤9.配置构建后操作10测试构建 前文链接&#xff1a; Ubuntu上Jenkins自动…

java常用应用程序编程接口(API)——Instant,DateTimeFormatter,Period,Duration概述

前言&#xff1a; 整理下学习心得。打好基础&#xff0c;daydayup&#xff01; Instant Instant是时间线上的某个时刻/时间戳&#xff0c;通过获取Instant的对象可以拿到此刻的时间&#xff0c;该时间由两部分组成&#xff1a;1&#xff0c;从1970年1月1日00:00:00开始走到此刻…

前端开发 VSCode 插件推荐

1、Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code VS Code 的中文&#xff08;简体&#xff09;语言包&#xff0c;此中文&#xff08;简体&#xff09;语言包为 VS Code 提供本地化界面。 下载地址&#xff1a;Chinese (Simplified) (简体中文) La…