JAVA----基本类型与运算

目录

一、Java提供了哪些基本数据类型?

二、在Java语言中null值是什么?在内存中null是什么?

三、如何理解赋值语句String x=null?

四、int和Integer有什么区别?

五、什么是不可变类

六、在Java语言中,类型转换有哪几种类型?

(1)类型自动转换

(2)强制类型转换

七、 强制类型转换的注意事项有哪些?

八、Math类中round、ceil和floor方法的功能各是什么?

九、++i与i++有什么区别?


一、Java提供了哪些基本数据类型?

        Java语言一共提供了8种原始的数据类型(byte,short,int,long,float,double,char,boolean),这些数据类型不是对象,而是Java语言中不同于类的特殊类型,这些基本类型的数据变量在声明之后就会立刻在栈上被分配内存空间。

        除了这8种基本的数据类型外,其他类型都是引用类型(例如类、接口、数组等),引用类型类似于C++中的引用或指针的概念,它以特殊的方式指向对象实体,这类变量在声明时不会被分配内存空间,只是存储了一个内存地址而已。

        此外,Java语言还提供了对这些原始数据类型的封装类(字符类型Character,布尔类型Boolean,数值类型Byte、Short、Integer、Long、Float、Double)。

        需要注意的是,Java中的数值类型都是有符号的,不存在无符号的数,它们的取值范围也是固定的,不会随着硬件环境或者操作系统的改变而改变。除了以上提到的8种基本数据类型以外,在Java语言中,还存在另外一种基本类型void,它也有对应的封装类java.lang.void,只是无法直接对它进行操作而已。

封装类型和原始类型有许多不同点:

        首先,原始数据类型在传递参数时都是按值传递,而封装类型是按引用传递的。

        其次,当封装类型和原始类型用作某个类的实例数据时,它们所指定的默认值不同。对象引用实例变量的默认值为null,而原始类型实例变量的默认值与它们的类型有关(例如int默认初始化为0)

二、在Java语言中null值是什么?在内存中null是什么?

        null不是一个合法的Object实例,所以编译器并没有为其分配内存,它仅仅用于表明该引用目前没有指向任何对象。其实,与C语言类似,null是将引用变量的值全部置0。

三、如何理解赋值语句String x=null?

        在Java语言中,变量被分为两大类型:原始值(primitive)与引用值(reference)。声明为原始类型的变量,其存储的是实际的值。声明为引用类型的变量,存储的是实际对象的地址(指针,引用)。对于赋值语句String x=null,它定义了一个变量“x”,x中存放的是String引用,此处为null。

四、int和Integer有什么区别?

        Java语言提供两种不同的类型,即引用类型和原始类型(或内置类型)。int是Java语言的原始数据类型,Integer是Java语言为int提供的封装类。Java为每个原始类型提供了封装类。
引用类型与原始类型的行为完全不同,并且它们具有不同的语义。而且,引用类型与原始类型具有不同的特征和用法。

五、什么是不可变类

        不可变类是指当创建了这个类的实例后,就不允许修改它的值了,也就是说,一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了。它有点类似于常量(const),即只允许别的程序读,不允许别的程序进行修改。

在Java类库中,所有基本类型的包装类都是不可变类,例如Integer、Float等。此外,String也是不可变类。

要创建一个不可变类需要遵循下面5条基本原则:
1)类中所有成员变量被private所修饰。
2)类中没有写或者修改成员变量的方法,例如setxxx,只提供构造函数,一次生成,永不改变。
3)确保类中所有方法不会被子类覆盖,可以通过把类定义为final或者把类中的方法定义为final来达到这个目的。
4)如果一个类成员不是不可变量,那么在成员初始化或者使用get方法获取该成员变量时,需要通过clone方法来确保类的不可变性。
5)如果有必要,可使用覆盖Object类的equals()方法和hashCode()方法。在equals()方法中,根据对象的属性值来比较两个对象是否相等,并且保证用equals()方法判断为相等的两个对象的hashCode()方法的返回值也相等,这可以保证这些对象能被正确地放到HashMap或HashSet集合中。

六、在Java语言中,类型转换有哪几种类型?

(1)类型自动转换

低级数据类型可以自动转换为高级数据类型

当类型自动转换时,需要注意以下几点:
1)char类型的数据转换为高级类型(如int,long等),会转换为其对应的ASCII码。
2)byte、char、short类型的数据在参与运算时会自动转换为int型,但当使用“+=”运算时,就不会产生类型的转换
3)另外,在Java语言中,基本数据类型与boolean类型是不能相互转换的。
总之,当有多种类型的数据混合运算时,系统会先自动地将所有数据转换成容量最大的那一种数据类型,然后再进行计算。

(2)强制类型转换

当需要从高级数据类型转换为低级数据类型时,就需要进行强制类型转换

需要注意的是,在进行强制类型转换时可能会损失精度。

七、 强制类型转换的注意事项有哪些?

        Java语言在涉及byte、short和char类型的运算时,首先会把这些类型的变量值强制转换为int类型,然后对int类型的值进行计算,最后得到的值也是int类型。因此,如果把两个short类型的值相加,最后得到的结果是int类型;如果把两个byte类型的值相加,最后也会得到一个int类型的值。如果需要得到short类型的结果,就必须显式地把运算结果转换为short类型

例如对于语句short s1=1;s1=s1+1

由于在运行时会首先将s1转换成int类型,因此s1+1的结果为int类型,这样编译器会报错,所以,正确的写法应该short s1=1;s1=(short)(s1+1)。

有一种例外情况。“+=”为Java语言规定的运算法,Java编译器会对其进行特殊处理,因此,语句short s1=1;s1+=1能够编译通过

八、Math类中round、ceil和floor方法的功能各是什么?

1)round方法表示四舍五入。round,意为“环绕”,其实现原理是在原来数字的基础上先增加0.5然后再向下取整,等同于(int)Math.floor(x+0.5f)。它的返回值类型为int型,例如,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11
2)ceil方法的功能是向上取整。ceil,意为“天花板”,顾名思义是对操作数取顶,Math.ceil(a),就是取大于a的最小的整数值。需要注意的是,它的返回值类型并不是int型,而是double型。若a是正数,则把小数“入”,若a是负数,则把小数“舍”。

Math.ceil(12.5)的结果为13

Math.ceil(-12.5)的结果为-12
3)floor方法的功能是向下取整。floor,意为“地板”,顾名思义是对操作数取底。Math.floor(a),就是取小于a的最大的整数值。它的返回值类型与ceil方法一样,也是double型。若a是正数,则把小数“舍”;若a是负数,则把小数“入”。

Math.floor(12.5)的结果为12,

Math.floor(-11.5)的结果为-12

九、++i与i++有什么区别?

在编程时,经常会用到变量的自增或自减操作,尤其在循环中用得最多。以自增为例,有两种自增方式:前置与后置,即++i和i++,它们的不同点在于i++是在程序执行完毕后进行自增,而++i是在程序开始执行前进行自增

i=1 ,i++ + i++ =?,i++ + ++i=?,

i++ + i++ +i++=

表达式i+++i++首先执行第一个i++操作,由于自增操作会稍后执行,因此,运算时i的值还是1,但自增操作后,i的值变为了2,接着执行第二个i++,运算时,i的值已经为2了,而执行了一个自增操作后,i的值变为了3,所以i+++i++=1+2=3,而运算完成后,i的值变3。

表达式i++ + ++i首先执行第一个i++,但是自增操作会稍后执行。因此,此时i的值还是3,接着执行++i,此时i的值变为4,同时还要补执行i++的自增操作,因此此时i的值变为5,所以i+++++i=3+5=8。

同理,i+++i+++i++=5+6+7=18。

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

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

相关文章

【iOS】ARC实现

ARC由以下工具来实现: clang(LLVM编译器)3.0以上objc4 Objective-C运行时库493.9以上 下面我们,我们将围绕clang汇编输出和objc4库的源代码探究ARC实现 1. __strong修饰符 1.1 赋值给附有__strong修饰符的变量 看下面代码 {…

注释气泡图函数(更新)

之前我们写过一个原创可视化函数Dotplot_anno.R,nature级别图表:一个注释气泡热图函数(适用于单细胞及普通数据)。主要解决的问题是1) 单细胞基因可视化分组注释。2) Bulk RNA差异基因热图、气泡图。3) 富集分析结果气泡图展示。这…

ElementUI —— Upload 文件上传

前言&#xff1a; 实现单文件上传&#xff01;此文章仅记录代码如何实现&#xff0c;便于后期项目学习使用&#xff01;&#xff01; 代码实现&#xff1a; <!--********** View ********** --> <el-uploadclass"upload-demo":http-request"UploadFi…

通过concurrently 包,在一个终端中通过npm script运行两个项目

npm script可以通过 && 串行&#xff0c;& 并行执行两个任务&#xff0c;但是不能在同个打开的终端中运行两个项目&#xff0c;可以通过concurrently包解决 安装 npm i concurrently -Dscript命令 "dev":"concurrently \"npm run start\&quo…

Numpy—ndarray对象

NumPy 最重要的一个特点是其N维数组对象 ndarray&#xff0c;它是一系列同类型数据的集合&#xff0c;以 0 下标为开始进行集合中元素的索引。 ndarray 对象是用于存放同类型元素的多维数组。ndarray 中的每个元素在内存中都有相同存储大小的区域。ndarray 内部由以下内容组成…

【分布式训练】基于Pytorch的分布式数据并行训练

基于Pytorch的分布式数据并行训练 动机为什么要并行分布数据&#xff1f;现有资料的不足 Outline整体框架图带解释的最小demo示例没有multiprocessing开启multiprocessing 分布式训练启动方式混合精度训练&#xff08;采用apex&#xff09; 参考资料 简介&#xff1a; 在PyTorc…

【ROS】ROS1人机界面开发:第一个最简ROS+QtGui程序(按钮启动发布者)

【ROS】郭老二博文之:ROS目录 1、创建工程 1)新建工程:Other Project --> ROS Workspace 2)设置工程名称、路径 3)可以通过点击“Browse”来创建目录 注意:使用自带ros插件的qtcreator-ros,无法创建目录、也不能选择目录,这是个bug,因此需要在终端手动创建目录…

密码学学习笔记(十六 ):Schnorr签名算法

交互式零知识证明 零知识证明(ZKP)就是不会将证据泄露给验证者的知识证明。Schnorr身份认证识别协议是一个交互式ZKP&#xff0c;它满足了完备性、可靠性、零知识性。所谓的交互式ZKP方案通常包含3个步骤&#xff08;承诺、挑战和证明&#xff09;&#xff0c;在文献中通常被称…

elastic elasticsearch 源码解析之选主选举过程

选主 选举算法 角色定义 这里的选主为什么提角色? 是因为不同角色在选主中起到不同的作用.master的非voting_only节点不但参与投票同时还可以参与竞选, master 的voting_only角色仅投票不参与竞选,其余角色不参与. 支持的角色 master data data_content data_hot data_wa…

django框架向DRF框架演变过程详解

一、Django框架实现项目查询接口 主要知识点&#xff1a; Django框架视图函数 1、在 Django 项目中创建一个应用&#xff08;如果还没有创建&#xff09;&#xff1a; python manage.py startapp projects 2、在项目的 models.py 文件中定义项目模型 from django.db impor…

React面试题汇总

1、面试官&#xff1a;说说对 React 的理解&#xff1f;有哪些特性&#xff1f; React遵循组件设计模式&#xff0c;使用虚拟 DOM 来有效地操作 DOM&#xff0c;遵循从高阶组件到低阶组件的单向数据流。React 特性有很多&#xff0c;如&#xff1a;JSX 语法、单向数据绑定、虚…

【C++】-stack和queue的具体使用以及模拟实现(dqeue的介绍+容器适配器的介绍)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

Java八股文总结(二)

Java八股文总结&#xff08;续&#xff09; 接上篇笔记&#xff1a;Jhttps://blog.csdn.net/weixin_44780078/article/details/130192373 文章目录 Java八股文总结&#xff08;续&#xff09;六、MySql 相关1. InnoDB 与 MyISAM 的区别&#xff1f;2. 为什么 InnoDB 存储引擎表…

kubesphere部署kafka单点

zookeeper 存储: #zk-cm nfsRWO /bitnami/zookeeper 配置: 秘钥: 服务: 有状态服务 名称: zookeeper 镜像: bitnami/zookeeper:3.8.0 副本数量: 环境变量: - TZAsia/Shanghai - ZOO_SERVER_ID1 - ZOO_PORT_NUMBER2181 - ZOO_HEAP_SIZE128 - ALLOW_ANONYMOUS_LOGINyes 启动…

JavaFx 用户界面控件2——ListView

1.列表显示ListView 下面是一个JavaFX ListView的示例代码和使用方法&#xff1a; public class ListViewExample extends Application {Overridepublic void start(Stage primaryStage) {// 创建一个可观察的列表&#xff0c;用于存储ListView中的数据ObservableList<Str…

【MongoDB】SpringBoot整合MongoDB

【MongoDB】SpringBoot整合MongoDB 文章目录 【MongoDB】SpringBoot整合MongoDB0. 准备工作1. 集合操作1.1 创建集合1.2 删除集合 2. 相关注解3. 文档操作3.1 添加文档3.2 批量添加文档3.3 查询文档3.3.1 查询所有文档3.3.2 根据id查询3.3.3 等值查询3.3.4 范围查询3.3.5 and查…

UML与SYSML的关系

UML与SysML的联系 UML&#xff08;统一建模语言&#xff09;和SysML&#xff08;系统建模语言&#xff09;是两种与建模相关的语言&#xff0c;它们之间存在联系和区别。 SysML的图分类如下图所示。 联系 SysML是基于UML的&#xff0c;它重用了UML 2的子集&#xff0c;并提…

wordpress后台的路径都是空白,进不了后台怎么办?

主题或插件冲突&#xff1a;某些主题或插件可能与其他已安装的主题或插件不兼容&#xff0c;导致登录页面显示为空白。您可以通过禁用所有插件和将主题更改为默认主题来查看是否解决了问题。如果解决了问题&#xff0c;则可以逐个重新启用插件以找出是哪个插件造成冲突。 PHP错…

CGT Asia嘉年华|3D细胞培养与类器官研发峰会10月广州召开

类器官指利用成体干细胞或多能干细胞进行体外三维&#xff08;3D&#xff09;培养而形成的具有一定空间结构的组织类似物&#xff0c;是近10年来干细胞领域发展最快的研究热点之一。2022年&#xff0c;FDA 通过现代化法案 2.0&#xff0c;批准全球首个完全基于“类器官芯片”研…

Win11中的Swapfile.sys

除了 pagefile.sys 和 hiberfil.sys 文件外&#xff0c;在系统根目录会多出一个 swapfile.sys 虚拟内存文件。Windows 10/8 系统为什么会同时使用 SWAP 交换文件和 Page 页面文件呢&#xff1f; 其实 swapfile.sys 文件目前只被用来交换 Universal App (其实就是Metro App)的个…