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

    1.初始化: 初始化就是在声明变量的同时给变量赋值,而不是声明后再赋值. 先声明,后赋值: int a; //先声明,由于没有初始化,所以当前a的值是变量a创建前,相应的内存单元中保留的值,是未知的 ...

  2. Katalon Studio之接口测试中token处理

    前言 最近抽时间接触了一下Katalon Studio(后面简称KS),并且利用KS做了一些接口测试的试验,感觉还不错,不过其中接口授权中缺少通过token动态验证的方案,虽然KS支持Authoriz ...

  3. Mesos源码分析(8): Mesos-Slave的初始化

      Mesos-Slave的初始化在文件src/slave/slave.cpp里面     首先初始化资源预估器   初始化attributes   初始化hostname     初始化status ...

  4. Java 延迟队列使用

    延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到…… 应用场景比较多,比如延时1分钟发短 ...

  5. ansible基础-理解篇

    1. 介绍 要说现在的部署工具,ansible可以说家喻户晓了. ansible是一个开源软件,用于软件供应.配置管理.应用部署.ansible可以通过SSH.remote PowerShell.其他 ...

  6. [Swift]LeetCode225. 用队列实现栈 | Implement Stack using Queues

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  7. [Swift]LeetCode706. 设计哈希映射 | Design HashMap

    Design a HashMap without using any built-in hash table libraries. To be specific, your design should ...

  8. [Swift]LeetCode721. 账户合并 | Accounts Merge

    Given a list accounts, each element accounts[i] is a list of strings, where the first element accoun ...

  9. [Swift]LeetCode861. 翻转矩阵后的得分 | Score After Flipping Matrix

    We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...

  10. PHP算法之斐波那契数列(递归)

    /*斐波那契数列 源代码分析 f(x) = 1 ; 当 x < 2 ; f(x) = f(x-1)+f(x-2); 当 x >= 2 ; 通项式为:fn ={((1+根号5)/2)^n-( ...