java char 空_2020重新出发,JAVA入门,数据类型

数据类型

通过上一节,明白了变量就是申请内存来存储值,即当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,确定了变量的类型,即确定了数据需分配内存空间的大小,数据在内存的存储方式。

Java 是一种强制类型的语言,所有的变量都必须先明确定义其数据类型,然后才能使用。

Java 中所有的变量、表达式和值都必须有自己的类型,没有“无类型”变量这样的概念。

Java 语言支持的数据类型分为两种:内置数据类型/基本数据类型 & 引用数据类型

  • 基本数据类型(primitive type):都是直接存储在内存中的内存上,数据本身的值就是存储在栈空间;
  • 引用数据类型(reference type):继承与Object类,引用(即指针)是存储在有序的内存栈上,而对象本身的值存储在内存堆中。

52a6962755c10ef51c07e03941122ef1.png

基本数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

占用存储范围: 1字符 = 2字节(byte)= 16位

e3ea0cefc851a80f0d2153144525e173.png

对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。

请看下面的例子:

public class PrimitiveTypeTest {public static void main(String[] args) {// byte  System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);System.out.println("包装类:java.lang.Byte");System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);System.out.println();// short  System.out.println("基本类型:short 二进制位数:" + Short.SIZE);System.out.println("包装类:java.lang.Short");System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);System.out.println();// int  System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);System.out.println("包装类:java.lang.Integer");System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);System.out.println();// long  System.out.println("基本类型:long 二进制位数:" + Long.SIZE);System.out.println("包装类:java.lang.Long");System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);System.out.println();// float  System.out.println("基本类型:float 二进制位数:" + Float.SIZE);System.out.println("包装类:java.lang.Float");System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);System.out.println();// double  System.out.println("基本类型:double 二进制位数:" + Double.SIZE);System.out.println("包装类:java.lang.Double");System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);System.out.println();// char  System.out.println("基本类型:char 二进制位数:" + Character.SIZE);System.out.println("包装类:java.lang.Character");// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台  System.out.println("最小值:Character.MIN_VALUE="+ (int) Character.MIN_VALUE);// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台  System.out.println("最大值:Character.MAX_VALUE="+ (int) Character.MAX_VALUE);}}

输出

基本类型:byte 二进制位数:8包装类:java.lang.Byte最小值:Byte.MIN_VALUE=-128最大值:Byte.MAX_VALUE=127基本类型:short 二进制位数:16包装类:java.lang.Short最小值:Short.MIN_VALUE=-32768最大值:Short.MAX_VALUE=32767基本类型:int 二进制位数:32包装类:java.lang.Integer最小值:Integer.MIN_VALUE=-2147483648最大值:Integer.MAX_VALUE=2147483647基本类型:long 二进制位数:64包装类:java.lang.Long最小值:Long.MIN_VALUE=-9223372036854775808最大值:Long.MAX_VALUE=9223372036854775807基本类型:float 二进制位数:32包装类:java.lang.Float最小值:Float.MIN_VALUE=1.4E-45最大值:Float.MAX_VALUE=3.4028235E38基本类型:double 二进制位数:64包装类:java.lang.Double最小值:Double.MIN_VALUE=4.9E-324最大值:Double.MAX_VALUE=1.7976931348623157E308基本类型:char 二进制位数:16包装类:java.lang.Character最小值:Character.MIN_VALUE=0最大值:Character.MAX_VALUE=65535

Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少次方。比如3.14E3就是3.14 × 10的3次 =3140,3.14E-3 就是 3.14 x 10的-3次 =0.00314。

实际上,JAVA中还存在另外一种基本类型 void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。

引用数据类型

引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。另外,Java 语言中不支持 C++ 中的指针类型、结构类型、联合类型和枚举类型。

引用类型还有一种特殊的 null 类型。所谓引用数据类型就是对一个对象的引用,对象包括实例和数组两种。实际上,引用类型变量就是一个指针,只是 Java 语言里不再使用指针这个说法。

空类型(null type)就是 null 值的类型,这种类型没有名称。因为 null 类型没有名称,所以不可能声明一个 null 类型的变量或者转换到 null 类型。

空引用(null)是 null 类型变量唯一的值。空引用(null)可以转换为任何引用类型。

在实际开发中,程序员可以忽略 null 类型,假定 null 只是引用类型的一个特殊直接量。

注意:空引用(null)只能被转换成引用类型,不能转换成基本类型,因此不要把一个 null 值赋给基本数据类型的变量。

数据类型转换

数据类型的转换是在所赋值的数值类型和被变量接收的数据类型不一致时发生的,它需要从一种数据类型转换成另一种数据类型。

数据类型的转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种。

隐式转换(自动类型转换)

如果以下 2 个条件都满足,那么将一种类型的数据赋给另外一种类型变量的时,将执行自动类型转换(automatic type conversion)。

  • 两种数据类型彼此兼容
  • 目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)

当以上 2 个条件都满足时,拓宽转换(widening conversion)发生。

例如 byte 类型向 short 类型转换时,由于 short 类型的取值范围较大,会自动将 byte 转换为 short 类型。

在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:

  • 数值型数据的转换:byte→short→int→long→float→double。
  • 字符型转换为整型:char→int。

以上数据类型的转换遵循从左到右的转换顺序,最终转换成表达式中表示范围最大的变量的数据类型。

例 :顾客到超市购物,购买牙膏 2 盒,面巾纸 4 盒。其膏的价格是 10.9 元,面巾纸的价格是 5.8 元,求商品总价格。实现代码如下:

public static void main(String[] args) {   float price1 = 10.9f; // 定义牙膏的价格    double price2 = 5.8; // 定义面巾纸的价格    int num1 = 2; // 定义牙膏的数量    int num2 = 4; // 定义面巾纸的数量    double res = price1 * num1 + price2 * num2; // 计算总价    System.out.println("一共付给收银员" + res + "元"); // 输出总价
}

上述代码中首先定义了一个 float 类型的变量存储牙膏的价格,然后定义了一个 double 类型的变量存储面巾纸的价格,再定义两个 int 类型的变量存储物品的数量,最后进行了乘运算以及和运算之后,将结果储存在一个 double 类型的变量中进行输出。

程序执行结果

一共付给收银员44.99999923706055元

从执行结果看出,float、int 和 double 三种数据类型参与运算,最后输出的结果为 double 类型的数据。

这种转换一般称为“表达式中类型的自动提升”。

自动类型提升有好处,但它也会引起令人疑惑的编译错误。

例如,下面看起来正确的程序却会引起问题:

byte b = 50;
b = b * 2;  // Type mismatch: cannot convert from int to byte

如上所示,第二行会报“类型不匹配:无法从int转换为byte”错误。

该程序试图将一个完全合法的 byte 型的值 50*2 再存储给一个 byte 型的变量。

但是当表达式求值的时候,操作数被自动的提升为 int 型,计算结果也被提升为 int 型。

这样表达式的结果现在是 int 型,不强制转换它就不能被赋为 byte 型。

确实如此,在这个特别的情况下,被赋的值将仍然适合目标类型。

所以应该使用一个显示的强制类型转换,例如:

byte b = 50;
b = (byte)(b*2);

这样就能产生正确的值 100。

注意:char 类型比较特殊,char 自动转换成 int、long、float 和 double,但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。

显式转换(强制类型转换)

尽管自动类型转换是很有帮助的,但并不能满足所有的编程需要。例如,如果你需要将 double 型的值赋给一个 int 型的变量。

这种转换不会自动进行,因为 double 型的变化范围比 int 型的要小。这种转换有使成为“缩小转换”,因为肯定要将源数据类型的值变小才能适合目标数据类型。

所以当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。

语法格式如下:

(type)variableName

其中,type 为 variableName 要转换成的数据类型,而 variableName 是指要进行类型转换的变量名称

实例如下:

int a = 3;
double b = 5.0;
a = (int)b;

上述代码中首先将 double 类型变量 b 的值强制转换成 int 类型,然后将值赋给 a,但是变量 b 本身的值是没有发生变化的。

在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。

例1:顾客到超市购物,购买牙膏 2 盒,面巾纸 4 盒。其中牙膏的价格是 10.9 元,面巾纸的价格是 5.8 元,求商品总价格,在计算总价时采用 int 类型的数据进行存储。实现代码如下:

public static void main(String[] args) {    float price1 = 10.9f;    double price2 = 5.8;    int num1 = 2;    int num2 = 4;    int res2 = (int) (price1 * num1 + price2 * num2);    System.out.println("一共付给收银员" + res2 + "元");
}

在上述实例中,有 double 类型、float 类型和 int 类型的数据参与运算,其运算结果默认为 double 类型,题目要求的结果为 int 类型,因为 int 类型的取值范围要小于 double 类型的取值范围,所以需要进行强制类型转换。

执行结果

一共付给收银员44元

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

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

相关文章

域控制器

1. Server01上创建域控制器:域名uec.com DNS和本机在同一台机器上。2. Server02 创建现有域的额外控制器,同时在本机生成DNS区域,检查DC间复制状态。卸载域控制器:域的备份还原:实例: 域的备份 对当前UEC.COM的域控制器Ser…

u-boot启动参数命令格式

指令功能nand info显示可使用的 Nand Flashnand device [dev]显示或设定当前使用的 Nand Flashnand read addr off sizeNand Flash 读取命令,从 Nand 的 off 偏移地址处读取 size 字节的数据到 SDRAM 的 addr地址。nand write addr off sizeNand Flash 烧写命令&…

iOS7下隐藏status bar的详细研究

info.plist文件中,View controller-based status bar appearance项设为YES,则View controller对status bar的设置优先级高于application的设置。为NO则以application的设置为准,view controller的prefersStatusBarHidden方法无效,…

产品经理应该mysql_数据库对产品经理的重要性

产品经理在设计产品的过程中基本上都在和数据打交道,对产品数据存储结构设计的了解可以帮助产品经理建立产品的数据模型,数据模型就是数据在服务器中存储结构的设计,功能层上看到的是一个个根据用户场景设计的功能,但是实际上在数…

实验一报告

北京电子科技学院(BESTI) 实 验 报 告 课程:Java   班级: 1352    姓名:谈愈敏   学号:20135220 成绩:   指导教师:娄嘉鹏       实验日期…

mysql中下杠怎么打_怎么打字母下方的短横杠?,下横杠怎么打

下横杠怎么打,怎么打字母下方的短横杠?对于电脑操作,大多数成年人不及现在的孩子们。今天看到同事在编辑一篇文档,需要在字母下面打一条短横杠,如下图所示。但是同事怎么也打不出来,坐在旁边的他的孩子,看着有点不耐烦…

云计算解决方案——电信行业

2019独角兽企业重金招聘Python工程师标准>>> 云计算解决方案——电信行业 由于业务的快速发展,电信运营商每年要采购大量的服务器和存储设备,这些资源闲置或者偶尔被使用,造成大量的投资浪费。解决这一问题最好的方法是在企业内部…

怎么让织梦文章按照权重排序

在网站列表页中排列的顺序是可以用织梦标签来控制的,也可以自定义文章排列方式,也有很多人想要网站根据自己的想法来罗列文章,所以最好的方法就是按照权重排序,这样只要修改文章的权重就可以让排列到自己想要的位置上。 在织梦论坛…

华硕主板装系统蓝屏_华硕笔记本电脑重装系统后蓝屏怎么办

华硕笔记本电脑重装系统后蓝屏怎么办?笔记本重装系统后蓝屏怎么办,之前笔记本系统很慢很慢,想重新安装一下操作系统,重新安装的是Windows 7的系统,使用的是Ghost系统盘,为什么重新安装玩系统之后蓝屏了,其…

一个配置web.xml的编程方法

使用编程方法针对任何java/j2ee配置web.xmlIntroduction本文介绍了Java和J2EE项目使用任何一种编程方法的web.xml配置Background作为一种传统的方法,Java和J2EE的Web应用中的任何servlet上下文和其他监听器的配置都是在web.xml文件中配置的。与此相反,Se…

[LeetCode]LRU Cache有个问题,求大神解答【已解决】

题目: Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set. get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise ret…

ci phpexcel mysql_PHPExcel导入数据到mysql数据库

用了PHPexcel插件&#xff0c;将excel的数据导入到msyql数据库里面&#xff0c;之前一直有乱码&#xff0c;这是我亲测的&#xff0c;没有乱码哦&#xff01;页面编码&#xff1a;gb2312mysql编码&#xff1a;gb2312<?php include_once(inc/conn.php);$file $HTTP_POST_FI…

MyEclipse 8.0注冊码+原版下载_Java开发软件

MyEclipse是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合&#xff0c;MyEclipse的功能很强大&#xff0c;支持也十分广泛&#xff0c;尤其是对各种开元产品的支持十分不错。MyEclipse眼下支持Java Servlet,AJAX, JSP, JSF, Struts,Spring, Hibernate,EJB3,JDBC数据库链接…

从CentOS6.0i386到CentOS6.6x86-64,搬家中,磕磕跘跘,各种折腾……

2019独角兽企业重金招聘Python工程师标准>>> 原本打算从 CentOS 6.0 i386 蹦到 CentOS 7.1 x86-64 &#xff0c;结果声卡一灵九不灵的问题没解决。决定退到 CentOS 6.6 x86-64 。 装好 CentOS 6.6 x86-64 &#xff0c;原生创建的用户 guest 貌似没啥问题。但直接迁…

java程序源代码如何保存到桌面_如何编写JAVA小白第一个程序

学习上一篇文章之后&#xff0c;确定好JDK和环境变量都成功之后&#xff0c;我们来编写我们第一个java程序命名为HelloWorld.java。上一篇文章链接&#xff1a;JDK下载与环境变量的安装桌面上右击&#xff0c;新建一个文本文档用记事本打开文本文档编写如上图代码&#xff0c;注…

hdu 3177贪心

#include<stdio.h>/*只能按这种形式排序单纯一种形式是不对的&#xff0c;按ai排序 20 2 1 1 10 20 按bi排序 20 2 5 17 1 16 都是不对的 二a.ub.v得出的是先算a的需要的空间&#xff0c;a.vb.u算出的是先算b所需要的空间 */ #include<stdlib.h> #define N 1100 ty…

表及列信息查询

查某个用户下指定表名查表的基本信息&#xff0c;不指定表名则查该用户下所有的表&#xff0c;segment_type 指定为表类型 也有index 类型 select a.table_name 表名, b.created 创建时间, b.last_ddl_time 最后修改时间, c.last_analyzed 最后分析时间, c.tablespace_name 表空…

matlab图像输出表格_matlab 图像输出3维字

废话不多说。strE; scale10; % 绘制 3D 文字 new_fig figure(visible,on); word_handle text(0.01,0.5,str,... fontsize,200,... fontweight,bold,... fontunits,normalized); axis off set(gcf,PaperPosition,[0 0 8 8],PaperUnits,normalized) % saveas(gca,[pwd 1.png])…

我的C笔记

最近更新&#xff1a; 1&#xff0c;父进程fork一个子进程&#xff0c;当向父进程发送一个SIGINT或其它信号时&#xff0c;子进程是否会接受到该信号&#xff1f; 2&#xff0c;父进程调用system执行一个程序时&#xff0c;向父进程发送一个信号时&#xff0c;system运行中的程…

ArrayList的使用方法【转载】

ArrayList的使用方法【转载】 *** Source URL: http://i.yesky.com/bbs/jsp/view.jsp?articleID889992&forumID150 *** 1、什么是ArrayList ArrayList就是传说中的动态数组&#xff0c;用MSDN中的说法&#xff0c;就是Array的复杂版本&#xff0c;它提供了如下一些好处…