方法的出现缘起优化代码结构,但它的意义并不局限于此,正因为有了方法定义,编程语言才更像一门能解决实际问题的工具,而不仅仅是只能用于加减乘除的计算器。在数学的发展过程中,为了表示四则运算,人们创造了加减乘除符号,对应Java编程的“+”、“-”、“*”、“/”。但是随着运算类型的增多,新的运算符号来不及创造了,于是出现了函数形式的运算操作,譬如三角函数sin、cos等等。这种数学函数就是方法的雏形,对于三角函数来说,角度类似方法的输入参数,而函数值类似方法的输出参数。
自从有了方法,大部分的算术计算都可以使用方法来表达,不过基本数值类型如int、long等由于设计上的缘故,它们的变量并不能直接调用方法;因此Java另外为基本类型定义了对应的包装类型,通过包装变量才能调用相关的算术方法。下面是基本数值类型与包装数值类型的关系说明:
字节型byte,对应包装字节类型Byte
短整型short,对应包装短整类型Short
整型int,对应包装整型Integer
长整型long,对应包装长整类型Long
浮点型flotat,对应包装浮点类型Flota
双精度型double,对应包装双精度类型Double
包装类型与基本类型一样,首先要声明包装变量,然乎对该变量进行赋值。给包装变量赋值(或称初始化)有三种方式,分别介绍如下:
1、直接通过等号把具体数字赋值给包装变量,代码示例如下:

		// 初始化包装变量的第一种方式:直接用等号赋值
Integer oneInteger = 1;

2、调用Integer的valueOf方法完成指定数字的赋值,这里可将Integer换成该数字想要表达的包装类型,具体赋值代码见下:

		// 初始化包装变量的第二种方式:调用包装类型的valueOf方法
Integer oneInteger = Integer.valueOf(1);

3、使用关键字new创建新的包装变量,形如“new 包装类型名称(具体数字)”,下面是该方式的赋值代码例子:

		// 初始化包装变量的第三种方式:使用关键字new创建新变量
Integer oneInteger = new Integer(1);

话说包装变量的初始化方式为啥这么多呢?仿佛孔乙己号称茴香豆的茴字有四种写法。其实不管设计师还是程序员,大家都是人,有的喜欢简单点,有的希望严谨点,有的邋里邋遢,有的循规蹈矩,所谓萝卜青菜各有所爱,众口难调罢了。所以给包装变量赋值的写法,也只好一一照顾众人的口味,既有简单直白的写法,也有意思明了的写法,还有面向对象的写法,总有一款适合你。
既然可以把基本类型的变量直接赋值给包装变量,那么反过来能否直接将包装变量赋值给基本变量呢?很遗憾这个操作是不允许的,并且也不能使用基本类型之间的强制类型转换,只能通过指定方法获得对应的基本变量数值。例如,要想把包装变量赋值给整型变量,则需调用该包装变量的intValue方法。依此类推,从包装变量获取字节数值、短整数值、长整数值、浮点数值、双精度数值,就得分别调用包装变量的byteValue方法、shortValue方法、longValue方法、floatValue方法、doubleValue方法。下面是将包装变量赋值给各种基本类型变量的代码例子:

		// 初始化包装变量的第一种方式:直接用等号赋值
Integer oneInteger = 1;
System.out.println("oneInteger="+oneInteger);
// 把包装变量转换成字节变量,需要调用包装变量的byteValue方法
byte oneByte = oneInteger.byteValue();
System.out.println("oneByte="+oneByte);
// 把包装变量转换成短整变量,需要调用包装变量的shortValue方法
short oneShort = oneInteger.shortValue();
System.out.println("oneShort="+oneShort);
// 把包装变量转换成整型变量,需要调用包装变量的intValue方法
int oneInt = oneInteger.intValue();
System.out.println("oneInt="+oneInt);
// 把包装变量转换成长整变量,需要调用包装变量的longValue方法
long oneLong = oneInteger.longValue();
System.out.println("oneLong="+oneLong);
// 把包装变量转换成浮点变量,需要调用包装变量的floatValue方法
float oneFloat = oneInteger.floatValue();
System.out.println("oneFloat="+oneFloat);
// 把包装变量转换成双精度变量,需要调用包装变量的doubleValue方法
double oneDouble = oneInteger.doubleValue();
System.out.println("oneDouble="+oneDouble);

对于数值包装变量来说,它们仍旧允许使用四则运算符进行计算操作,包括运算符“+”“-”“*”“/”“%”等等。然而若要判断两个包装变量是否相等,便不可通过双等号“==”来判断,而要调用包装变量的equals方法来校验。equals方法返回true表示待比较的两个包装变量值相等,返回false表示两个数值不等,调用equals方法的代码示例如下:

		// 数值包装变量的equals方法相当于关系运算符“==”
boolean equalResult = oneInteger.equals(2);
System.out.println("equalResult="+equalResult);

除了基本的类型转换与数值运算之外,包装类型还提供了其它几种常见的逻辑方法。比如sum方法用来求两个数字之和,max方法用来求两个数字的较大值,min方法用来求两个数字的较小值。另有compare方法用来比较两个数字的大小,若二者相等则返回0,前者较小则返回-1,后者较小则返回1。这几个方法的调用代码例子如下:

		int a = 7, b = 8;
// 数值包装类型的sum方法相当于算术运算符“+”
int sum = Integer.sum(a, b);
System.out.println("sum="+sum);
// 数值包装类型的max方法用来求两个数字的较大值
int max = Integer.max(a, b);
System.out.println("max="+max);
// 数值包装类型的min方法用来求两个数字的较小值
int min = Integer.min(a, b);
System.out.println("min="+min);
// 数值包装类型的compare方法用来比较两个数字的大小,二者相等则返回0,前者较小则返回-1,后者较小则返回1
int compareResult = Integer.compare(a, b);
System.out.println("compareResult="+compareResult);

 

更多Java技术文章参见《Java开发笔记(序)章节目录

Java开发笔记(二十七)数值包装类型的更多相关文章

  1. Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发

    一.REST简介 REST(Representational State Transfer),表现形式状态转换,它是一种软件架构风格 当我们想表示一个网络资源的时候,可以使用两种方式: 传统风格资源描 ...

  2. Java开发笔记(十七)各得其所的多路分支

    前面提到条件语句的标准格式为“if (条件) { /* 条件成立时的操作代码 */ } else { /* 条件不成立时的操作代码 */ }”,乍看之下仿佛只有两个分支,一个是条件成立时的分支,另一个 ...

  3. Java学习笔记二十七:Java中的抽象类

    Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...

  4. Java开发笔记(序)章节目录

    现将本博客的Java学习文章整理成以下笔记目录,方便查阅. 第一章 初识JavaJava开发笔记(一)第一个Java程序Java开发笔记(二)Java工程的帝国区划Java开发笔记(三)Java帝国的 ...

  5. Java开发笔记(二十八)布尔包装类型

    前面介绍了数值包装类型,因为不管是整数还是小数,它们的运算操作都是类似的,所以只要学会了Integer的用法,其它数值包装类型即可一并掌握.但是对于布尔类型boolean来说,该类型定义的是“true ...

  6. Java开发笔记(三十三)字符包装类型

    正如整型int有对应的包装整型Integer那样,字符型char也有对应的包装字符型Character.初始化字符包装变量也有三种方式,分别是:直接用等号赋值.调用包装类型的valueOf方法.使用关 ...

  7. Java开发笔记(五十二)对象的类型检查

    前面介绍了类的多态性,来自于鸡类的实例chicken,既能用来表达公鸡实例,也能用来表达母鸡实例.可是这导致了一个问题,假如在call方法内部需要手工判断输入参数属于公鸡实例还是母鸡实例,那该如何是好 ...

  8. Java开发笔记(一百二十七)Swing的标签

    提起AWT的标签控件Label,那个使用体验可真叫糟糕,不但不支持文字换行,而且对中文很不友好,既可能把中文显示为乱码,还不支持博大精深的各种中文字体.所幸Swing的升级版标签JLabel在各方面都 ...

  9. Java开发笔记(二十四)方法的组成形式

    经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1.一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力:2.部分代码描述的是 ...

随机推荐

  1. vue中添加title中的小图标

    webpack.prod.conf.js 这个文件中: 引入代码const path = require('path') :下面是进行配置: new HtmlWebpackPlugin({ filen ...

  2. ElasticSearch(6.2.2)的java API官方文档的总结 (三)

    一 : SearchRequest用于任何与搜索文档,聚合和建议有关的操作,并且还提供了对生成的文档进行高亮显示的方法. 在最基本的形式中,我们可以向请求添加一个查询:    1:添加一个Search ...

  3. 干掉safedog命令

    sc delete safedogguardcenter    shutdown -r -t 00 两条命令搞定

  4. js中的单例模式

    1.场景:当我们需要多人合作完成一个项目,但是有一些操作是同样的操作时(例如:点击按钮显示加载的遮罩层:例如:提交表单时的验证都是一样的),这个时候我们就需要单例模式: 2.什么是单例模式:是一种常见 ...

  5. 分享我在 vue 项目中关于 api 请求的一些实现及项目框架

    本文主要简单分享以下四点 如何使用 axios 如何隔离配置 如何模拟数据 分享自己的项目框架 本文主要目的为以下三点 希望能够帮到一些人 希望能够得到一些建议 奉上一个使用Vue的模板框架 我只是把 ...

  6. [Swift]LeetCode37. 解数独 | Sudoku Solver

    Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must satisfy  ...

  7. [Swift]LeetCode121. 买卖股票的最佳时机 I | Best Time to Buy and Sell Stock

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  8. Python - 命令式编程与符号编程

    原文链接:https://zh.d2l.ai/chapter_computational-performance/hybridize.html本文是对原文内容的摘取和扩展. 命令式编程(imperat ...

  9. iOS学习——核心动画之Layer基础

    iOS学习——核心动画之Layer基础 1.CALayer是什么? CALayer我们又称它叫做层.在每个UIView内部都有一个layer这样一个属性,UIView之所以能够显示,就是因为它里面有这 ...

  10. 关于ML.NET v1.0 RC的发布说明

    ML.NET是面向.NET开发人员的开源和跨平台机器学习框架(Windows,Linux,macOS).使用ML.NET,开发人员可以利用他们现有的工具和技能组,通过为情感分析,推荐,图像分类等常见场 ...