方法的出现缘起优化代码结构,但它的意义并不局限于此,正因为有了方法定义,编程语言才更像一门能解决实际问题的工具,而不仅仅是只能用于加减乘除的计算器。在数学的发展过程中,为了表示四则运算,人们创造了加减乘除符号,对应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. dedecms 后台可以上传mp4,但无法选择

    原文链接 找到 /include/dialog/select_media.php 找到rmvb,在其后面加 “|mp4” 即可. 1

  2. unittest测试用例的执行顺序

    unittest的测试顺序为:有几个测试用例,测试固件就会执行多少次. 例如:只有一个测试用例时: setup--testcase1--teardown import unittest class F ...

  3. [Swift]LeetCode524. 通过删除字母匹配到字典里最长单词 | Longest Word in Dictionary through Deleting

    Given a string and a string dictionary, find the longest string in the dictionary that can be formed ...

  4. 解决git pull出现: Your local changes to the following files would be overwritten by merge: ...的问题

    今天在服务器上git pull是出现以下错误: error: Your local changes to the following files would be overwritten by mer ...

  5. VSCode与Deepin资源管理器冲突

    解决方式: xdg-mime default dde-file-manager.desktop inode/directory 此外,网上有较多推荐(在deepin 15.8版本上测试无效): gvf ...

  6. 本地连接虚拟机_环境搭建01_VMWARE/XShell/CentOS

    今天起准备搭建一套环境用来学习redis,dubbo,docker,nginx. 环境准备: 1.VMware12:  https://pan.baidu.com/s/1-LnqfrWw8ZjQdmG ...

  7. Linux之相关英文缩写含义

    1.目录名: 名称 英文 英文含义 描述 /boot boot 引导 操作系统的内核及在引导过程中使用的文件 /root root 根 系统管理员的主目录(根目录) /run run 运行 系统运行时 ...

  8. Vue轻松入门,一起学起来!

    我们创建一个项目,这个项目我们细说Vue. 一.如何在项目中添加模块 我们通过npm 进行 安装 模块. 首先我们通过cmd.exe cd进入你的项目根目录,必须存在package.json文件,安装 ...

  9. MVC从Controller到View的呈现

    图说MVC底层运行机制: 当路由机制已经激活Controller并InvokeAction后,如果返回的是View, 则ViewResult基于View呈现的请求响应机制内部借助MVC提供的View引 ...

  10. asp.net core 系列 17 通用主机 IHostBuilder

    一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...