Java基础语法(二)
承接上篇,谈到不同变量装载着不同数据类型的数据,那么Java支持的数据类型有哪些呢,本篇做一点小小的探究。
一、强类型语言
Java就是一种强类型的语言,包含着以下含义:
- 所有的变量必须在声明之后才能使用,不能用的不明不白或者用得很随意。
- 指定类型的变量只能结束类型与之匹配的值,很好理解,种瓜得瓜,种豆得豆,这才正常。
二、数据类型分类
Java数据类型分为基本数据类型和引用数据类型两大类。
1、基本数据类型
字符类型其实归于整数类型,是无符号整数类型。但鉴于他和其他兄弟姐妹有点不一样,所以把他单独拎出来,基本数据类型变分成了四类。
整数类型
1字节 = 8位
四种类型所占内存空间:
byte:在内存中占1个字节,也就是8位,表数范围:-2^7 ~2^7-1short:在内存中占2个字节,也就是16位,表数范围:-2^{15} ~2^{15}-1int: 在内存中占4个字节,也就是32位,表数范围:-2^{31} ~2^{31}-1long: 在内存中占8个字节,也就是64位,表数范围:-2{63}~2{63}-1
注意事项:
- 如果将一个比较小的整数(当然比byte和short要小)赋给byte和short变量,系统会自动把他们当作这两种类型处理。
- 如果把上面那个小的整数赋给long变量,系统首先会把数值当作int处理,int类型之后自动转换成long类型。
- 如果使用一个较大的整数值(反正比int大),系统则不会自动把他当作long处理,如果想的话,就在后面加上L或者l吧,推荐L。
整数的表示方式:
二进制:以0b或者0B开头。
八进制:以0开头。
十进制:懂得都懂。
十六进制:以0x或者0X开头。
所有的数字在计算机底层都是以二进制的形式存在的,且以补码的形式保存所有的整数。
- 正数的补码和原码完全相同。
- 负数最高位符号位不变,其他去反,整体加1,就是补码。
整数值默认是int类型,占32位,且最高位为符号位。最后加上L之后,转换成long类型,占64位。
由于最高位符号位的存在,当强制转换时,可能会导致数据产生偏差。
字符类型
字符型的值要用单引号
' ',一定是单引号!!!Java使用16位的Unicode字符集作为编码方式,所以支持任何语言。定义方式
char varName;
字符型表现形式:
- 直接通过单个字符表示。如
A,0等。 - 通过转义字符表示,如
\t,\r,\n等。如果想输出特殊的字符,则需要加上\再次转义,例如"d:\\numert". - 通过Unicode值表示,如
\uXXXX,XXXX代表一个16进制整数。
浮点类型
两种类型所占内存空间:
float:单精度浮点数,占4个字节,32位,第一位符号位,后8位为指数,后23位为尾数。double:双精度浮点数,占8个字节,64位,第一位符号位,后11位指数,后52位尾数。
注意事项:
- 默认类型为double类型,想用float类型处理,需要在后面i爱上f或者F。
- 浮点数需要加上小数点,不然当成int处理就懵逼了。
- 只有浮点数类型的数值才能用科学记数法:3.14e2表示3.14*10^2
关键的无穷:
Java为浮点数运算提供了三个特殊的浮点数值:正无穷大,负无穷大和非数。
- 正无穷大:正数除以0得到->
POSITIVE_INFINITY. - 负无穷大:负数除以0得到->
NEGATIVE_INFINITY. - 非数:0.0处以0.0或者对负数开方得到->
NaN - 注意:如果整数值除以0,会报错。
如果数值中位数过多,不论整数还是浮点数都可以通过下划线分割:
0b0000_0000_0010_1111
布尔类型
- 只有boolean类型,表示逻辑“真”或“假”。
- Java中不能用0或者非0表示true或者false。
- 其他的基本数据类型也不能转换成boolean类型。
- boolean类型值和字符串进行连接时,会自动转换为字符串类型。
2、引用数据类型
包括类、接口和数组类型,以及特殊的null类型。
- 之后将会提到。
三、基本类型转换
自动类型转换
- 自动也就是系统支持的,将表数范围小的数值直接赋给表数较大的变量,就可以实现自动类型转换。
- 其实很好理解,类似于数学里的集合,A比B大,C可以存在B里面,当然就可以存在A里面,而且空间还变大了呢,舒服。
- 任何基本类型的值和字符串进行连接运算时,都会自动转换成字符串类型,虽然字符串为引用类型。
- 下图为自动类型转换图:

强制类型转换
- 相反,自动类型转换图按反方向转换的话,就需要强制转换,格式:
(目标类型)值。 - 显然,和自动类型相比,强制类型转换是有风险的,可能会溢出,造成信息丢失。
四、表达式类型的自动提升
当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型会发生自动提升。
byte、short和char类型将自动提升为int类型。
提升到最高等级操作数同样的类型。具体查看转换图,右边比左边高。
易发生错误:
//定义一个short型变量
short value = 4;
//右边数值2为int型,所以右边自动转换为int类型,而左边是short,不匹配,错误!
value = value -2;
int val = 3;
//右边两个操作数都是int型,尽管不能除尽,但仍然得到int型数,输出int值7
int value = 23/val;
System.out.println("hello"+'a'+10);//输出字符串helloa10
System.out.println('a'+10+"hello");//‘a'自动提升至int类型,得出107,之后与字符串拼接,自动转换为字符串类型,输出字符串107hello
Java基础语法(二)的更多相关文章
- Java基础语法(二)<运算符>
运算符: 下面的都是相关的练习: 1.键盘录入一个三位整数数,请分别获取该三位数上每一位的数值 import java.util.Scanner; public class Test02 { publ ...
- Java基础语法(3)-运算符
title: Java基础语法(3)-运算符 blog: CSDN data: Java学习路线及视频 1.算术运算符 算术运算符的注意问题 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1. ...
- JavaSE入门学习6:Java基础语法之运算符和语句(上)
继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...
- Java菜鸟之java基础语法,运算符(三)
赋值运算符 (一)JAVA种的赋值运算符 = ,代表代表的等于,一般的形式是 左边变量名称 = 右边的需要赋的指或者表达式,如果左侧的变量类型级别比较高,就把右侧的数据转换成左侧相同的高 ...
- Java基础语法:运算符
Java 运算符(operator)根据功能分类: 算术运算符:+,-,*,/,%,++,-- 赋值运算符:= 关系运算符:>,<,>=,<=,==,!=,instanceof ...
- java基础语法(二)
一.运算符 算数运算符 算数运算符用在数学表达式中,它们的作用和在数学中的作用一样. 操作符 描述 例子 + 两数相加 1+1=2 - 两数相减 2-1=1 * 两数相乘 1*1=1 / 两数相除 1 ...
- Java基础语法<二> 字符串String
1. 代码点与代码单元 Java字符串由char序列组成.大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示. length()方法将返回采用UTF-16编码表示 ...
- Java基础语法(二)之流程控制语句
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块 .控制语句分为三类:顺序,选择和循环. “顺序结构”代表”先执行a,再执行b”的逻辑.比如,先找个女朋友, ...
- JavaSE入门学习7:Java基础语法之语句(下)
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
- Java基础语法(4)-流程控制
title: Java基础语法(4)-流程控制 blog: CSDN data: Java学习路线及视频 1.程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定 ...
随机推荐
- 树莓派上搭建arduino命令行开发环境
-------------还是博客园上面的格式看这舒服,不去新浪了------------- 为什么要在树莓派上开发arduino呢?总要把树莓派用起来嘛,不然老吃灰. 树莓派使用SSH时没有图形界面 ...
- AQL基本语法
目录: 基本的CRUD 插入 检索 更新 删除 匹配文件 排序和限制 限制 排序 组合 图操作 地理位置查询 一.数据预览 本次使用的数据共有43条,每条数据包含姓氏.年龄.活动状态和特征等六个字段 ...
- 详细梳理ajax跨域4种解决方案
前言 自动接触前端,跨域这个词就一直萦绕在耳畔.因为一般接手的项目都已经做好了这方面的处理,而且之前一直感觉对这方面模棱两可,所以今天就抽个时间梳理一下. 为什么需要跨域 跨域这个概念来自一个叫 &q ...
- 在虚拟机上的关于Apache(阿帕奇)(4)基于域名访问网站
这篇随笔是基于域名访问网站,和前后两篇文章基于ip和基于端口一起练习效果更好 首先配置网卡Ip地址与hosts文件 输入命令: vi /etc/hosts/ (每行只能写一条,格式为IP地址+空格 ...
- Luogu P1816 忠诚
rmq模板题.用st表切一个. 关于st表的详解见我的博客:st表.树状数组与线段树 笔记与思路整理 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家 ...
- Lab_1:练习3——分析bootloader进入保护模式的过程
文章链接:https://www.cnblogs.com/cyx-b/p/11809742.html 作者:chuyaoxin 一.实验内容 BIOS将通过读取硬盘主引导扇区到内存,并转跳到对应内存中 ...
- CSPS模拟 88
今天我还是个弟弟. 果然唯有AK不可超越.. T1 决策单调性,暴力上整体二分. 极限数据跑的挺快,可是被n<k的脑残测试点qj了.. T2 又是大模拟! T3 想到剩余同种数量的彩球完全等效 ...
- 阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
背景 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求.不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝 ...
- csps模拟测试92反思
连着挂了三天T1了. 89: SPFA$vst$数组没清空 90:调试的时候多删了一句代码 91:没开$long long$ 我真是废物. 希望以后不要犯SB错误了
- 「动态规划」-数位dp专题
数位dp,今天学长讲的稍玄学,课下花了一会时间仔细看了一下,发现板子是挺好理解的,就在这里写一些: 数位dp主要就是搞一些在区间中,区间内的数满足题目中的条件的数的个数的一类题,题目一般都好理解,这时 ...