Java 变量及基本数据类型
1.Java变量
1.1 变量的概念
- 内存中开辟的一块存储空间,用于存放运算过程中需要用到的数据;
- 该区域有自己的名称(变量名)和类型(数据类型);
- 该区域的数据可以在同一类型范围内不断变化;
1) 为什么需要定义变量
- 用来不断的存放同一类型的常量,并可以重复使用;
2) 定义变量的格式
- 数据类型 变量名 = 初始化值;
3)变量使用范围
- 变量的作用范围(一对{}之间有效,"就近原则");
1.2 变量的使用
1)声明
int a ; //表示声明一个整型变量,名为a; int b,c,d; //表示声明三个整型变量,名为b,c,d;
2)命名
- 只能包含数字、字母、_(下划线)和$(美元符号),并且不能以数字开头;
- 严格区分大小写
- 不能使用关键字
- 可以中文命名,但不建议
- 命名规则:建议“驼峰命名法”、“见名知意”,如定义个变量表示学生成绩:studentScore
//演示错误的命名
int 123abc; //不能以数字开头
int ab*5; //不能使用除了_和$之外的其它特殊字符
int break; //不能使用关键字
int score = 90;
System.out.println(Score); //编译错误,Java大小写严格区分 //演示正确的命名
int abc12;
int 变量; //正确但是不建议中文命名
int _12$a;
int MyName;
int myName;
3)初始化
声明的同时初始化:
int a = 250;
先声明后初始化:
int a;
a = 250;
int a,b=5; //声明了变量a和b,并给b赋值为5,a没有赋值
4)使用
- 对变量操作就是对它所存的那个数进行操作。
int a = 5; //声明变量a并赋值为5;
int b = a+10; //声明变量b,取出a的值5,加上10后,将和赋值给b
System.out.println(b); //输出b的值是15
a = a+b; //取出a的值5,再取出b的值15,再把两个数的和重新赋值给a
System.out.println(a); //输出a的值是20
- 变量的操作必须与数据类型匹配
int a = 3.14;
//报错:类型不匹配,Type mismatch: cannot convert from double to int
- 变量在使用之前必须声明并初始化
System.out.println(m); //编译错误,m未声明 int m;
System.out.println(m); //编译错误,m未初始化
2.基本数据类型
Java语言有8种基本数据类型,分别是用于存储整数、小数、字符和布尔类型数据,分别是:整数类型(包含byte、short、int、long)、小数类型(包含float、double)、char类型和boolean类型(false、true)。
数据类型 |
字节空间 | 使用场景 |
byte | 1字节(8位) | 存储字节数据(较常用) |
short | 2字节(16位) | 兼容性考虑(很少用) |
int | 4字节(32位) | 存储普通整数(常用) |
long | 8字节(64位) | 存储长整数(常用) |
float | 4字节(32位) | 存储浮点数(不常用) |
double | 8字节(64位) | 存储双精度浮点数(常用) |
char | 2字节(16位) | 存储一个字符(常用) |
boolean | 1字节(8位) | 存储逻辑变量(true、false)(常用) |
2.1 int类型
整型,占4个字节(32位),最大表示范围:-2^31~2^31-1,-2147483648~2147483647,大概21亿~-21亿。整数直接量默认为int型,但不能超出范围,超范围则编译错误。
int x = 3000000000; //java默认直接写出的整数直接量是int类型,30亿超出整数范围 //编译错误:The literal 3000000000 of type int is out of range ,超出int范围。
整数直接量(literal):就是直接写出的整数,如100,除了十进制书写形式,也可以写16进制形式(以0x或0X开头,如0x186a)或8进制(以0开头,如0303240)。
1)两个整数相除,结果还是整数,小数位无条件舍弃;
int a = 5;
int b = 2;
int c = 5/2;
int d = 2/5;
System.out.println(c); //结果为整数:2,小数位无条件舍弃
System.out.println(d); //结果为0
2)整数运算时若超出范围,则发生溢出,溢出是需要避免的;
int a = 2147483647; //int最大值
int b = a+1;
System.out.println(b); //-2147483648,结果超出最大值范围,发生溢出,int最大值+1得到int的最小值
2.2 long长整型
对于较大的整数运算(超出int的范围),可以使用long型,一个long型变量占用8个字节(64位),最大表示范围是:-2^63~2^63-1,即-9223372036854775808~9223372036854775807。
1)长整型直接量需再数字后加L或l
long a = 3000000000l; //声明一个长整型变量a,赋值为30亿
long b = 3000000000L; //声明一个长整型变量b,赋值为30亿
2)运算时若有可能溢出,建议在第1个数字后加L
//计算10*3亿并输出结果 long a = 10*300000000;
//两个整型运算默认得到的还是整型,但是结果已经超int范围,所以发生溢出
System.out.println(a); //结果发生溢出:-1294967296 //如可能溢出,建议在第1个数字后加L,这样得到的结果就是long型,这里发生自动类型转换
long b = 10L*300000000;
System.out.println(b);
3)获取自1970年1月1日0时到现在的毫秒数
//System.currentTimeMillis()可以获取,得到的结果是long型
long time = System.currentTimeMillis();
System.out.println(time);
2.3 double类型
浮点型,就是小数,包括folat和double,double类型变量占8个字节(64位),double型的精度值是float类型的两倍,所以也成为双精度浮点型。大多数场合使用double表示浮点数。
1)浮点数直接量默认为double型,若想表示float型,需要在数字后面加F或f
float a = 5.6F;
float b = 7.8f;
double pi = 3.14;
2)double型数据在参与运算时,有可能会出现舍入误差,所以精确运算场合不可使用
2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确表示1/3一样,所以才会出现舍入误差,如果在需要精确运算的时候,可以使用BigDecimal类来实现。
double x = 3.0;
double y = 2.9;
System.out.println(x-y);
//结果是0.10000000000000009,出现舍入误差
2.4 char类型
字符类型事实上是一个2字节(16位)无符号整数,这个值对应字符的编码。Java字符类型采用Unicode字符集编码,Unicode是世界通用的定长字符集,所有的字符都是16位。
字符直接量通过单引号表示,如‘中’,也可以采用16进制表示形式,如‘\u4e2d'。
char c1 = '中'; //内存中存的是'中'的编码
char c2 = '\u4e2d'; //‘4e2d’是‘中’对应的16位Unicode编码的16进制表示形式
System.out.println(c1);
System.out.println(c2);
1)采用Unicode编码格式,每个字符都对应一个码,表现形式是字符char,但实质上是码(int型)
在对char型变量赋值时,有三种方式:
- 字符直接量:如'A',变量中实际存储的是该字符的Unicode编码(无符号整数值),一个char型变量只能存储一个字符。
- 整型直接量:范围0~65535之间的整数,变量中实际存储的即该整数值,但表示的是该整数值所对应的Unicode字符。
- Unicode:如'\u0041',Unicode字符的16进制形式。
ASCII('a' = 97, 'A' = 65, '0' = 48)
public class Test {
public static void main(String[] args){
char cha = 97; //内存中存的是'中'的编码
char chA = 65;
char chNum0 = 48;
System.out.println("97表示字母"+cha);
System.out.println("69表示字母"+chA);
System.out.println("48表示数字"+chNum0);
} /*
运行结果:
97表示字母a
69表示字母A
48表示数字0
*/
2)字符直接量必须放在单引号中,有且仅有一个
char x = '你';
char y = '你好'; //编译错误
3)特殊字符需要通过\来转义
转义字符 | 含义 |
'\n' | 表示回车符 |
'\r' | 表示换行符 |
'\\' | 表示反斜杠(\) |
'\'' | 表示单引号(') |
'\"' | 表示双引号(") |
char x = '\"';
char y = '\\';
System.out.println(x); //结果: "
System.out.println(y); //结果: \
2.5 boolean类型
boolean类型占1个字节(8位),适用于逻
辑运算,表示某个条件是否成立,一般用于程序的流程控制。boolean类型只允许取值true或false;true表示条件成立,false表示条件不成立,默认值为false。
int a = 5;
boolean b = a-1>0;
System.out.print(b); //结果:true
3.基本类型间转换
不同的基本类型直接可以相互转换,类型大小关系如下图:
3.1两种方式:
- 自动类型转换(隐式类型转换):从小类型到大类型可以自动完成。
- 强制转换:从大类型到小类型,强制转换语法:(需要转换成的类型)变量,强制转换可能会造成精度丢失或溢出。
int a=5,b=5;
long c = a+b; //发生自动类型转换,int自动转换为long
a = (int)c; //强制转换,long强制转换为int,因为c=10没有超int范围,所以没发生溢出
long d = 3000000000L;
b = (int)d; //30亿超出int范围,强制转换发生溢出
System.out.println("d的值为"+d);
System.out.println("强制转换后b的值为"+b); /*
运行结果:
d的值为3000000000
强制转换后b的值为-1294967296
*/
3.2 两点规则:
- 整数直接量可以直接赋值给byte、short、char,但不能超出范围
- byte、short、char型数据参与运算时,先一律转换位int再运算
char a = 'a';
int b = a+10;
System.out.println(b); /*
运行结果:107
字符a是数字97,运算时先将a转换为码int97再做运算
*/
Java 变量及基本数据类型的更多相关文章
- JAVA 变量 数据类型 运算符 知识小结
---------------------------------------------------> JAVA 变量 数据类型 运算符 知识小结 <------------------ ...
- Java变量与数据类型之三:数据类型与转义字符
大家好,小乐又来了,上一篇:乐字节Java变量与数据类型之二:Java常量与变量, 今天接着讲Java变量与数据类型之三:数据类型与转义字符 一.数据类型 1.定义 Java是一种强类型语言,针对每种 ...
- 乐字节Java变量与数据类型之一:Java编程规范,关键字与标识符
大家好,我是乐字节的小乐,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字都需要见名知意: 代码适当缩进 书写过程成对编程 对 ...
- java变量、数据类型
public class Test { public static void main(String[] args) { //变量 //数据类型 变量名; //基本数据类型: //一个字节8位 //整 ...
- java变量和数据类型
变量 数据类型 变量名 = 数据值: 注意事项: 变量定义后可以不赋值,使用时再赋值.不赋值不能使用 变量使用时有作用域的限制. 变量不可以重复定义 数据类型转换 自动类型转换 范围大的数据类 ...
- java的五种数据类型解析
不知道大家对java的简单数据类型是否了解,下面针对Java的五种类型简单数据类型表示数字和字符,进行详细的讲解和分析. 一.简单数据类型初始化 在Java语言中,简单数据类型作为类的成员变量声明时自 ...
- JAVA中分为基本数据类型及引用数据类型
一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...
- JAVA基础知识之数据类型
JAVA的数据类型知识点主要包括基本数据类型,包装类,字符串类(String,StringBuffer, StringBuilder区别和用法),数组,数据类型转换等等,暂时只想到这么多,后面会再补充 ...
- JAVA变量的类型,定义变量
JAVA中常用的数据类型 数据类型 数据类型解释 说明 char 字符型 用于存储单个字符,如:性别“男”.“女”,电灯“开”.“关” int 整形 用于存储整数,如一天的时间是24小时,一月份是31 ...
随机推荐
- [codeforces219D]Choosing Capital for Treeland树形dp
题意:给出一棵树,带有向边,找出某个点到达所有点需要反转的最少的边. 解题关键:和求树的直径的思路差不多,将求(父树-子树)的最大值改为求特定值.依然是两次dfs,套路解法. 对树形dp的理解:树形d ...
- HashMap的clear方法
我们都知道HashMap的clear()方法会清楚map的映射关系,至于怎么实现的呢? 下面先看一下clear()方法的源码 public void clear() { Node<K,V> ...
- 使用API修改控制台输出的颜色(前景色和背景色)
1.api原型 SetConsoleTextAttribute BOOL WINAPI SetConsoleTextAttribute( _In_ HANDLE hConsoleOutput, // ...
- 为什么选择Netty
支持高并发访问 比核心 Java API 更好的吞吐量,较低的延时资源消耗更少,这个得益于共享池和重用减少内存拷贝 https://baike.baidu.com/item/Netty/1006162 ...
- 2018ACM山东省赛 Games(dp取数)
Games Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description Alice and Bob ...
- 从网络架构方面简析循环神经网络RNN
一.前言 1.1 诞生原因 在普通的前馈神经网络(如多层感知机MLP,卷积神经网络CNN)中,每次的输入都是独立的,即网络的输出依赖且仅依赖于当前输入,与过去一段时间内网络的输出无关.但是在现实生活中 ...
- 3DMAX 多维材质及对应的UVW展开,UVW贴图
多维材质说明 多维材质就是一个模型多个材质,(混合材质是多个材质混一起,跟这个貌似没关,比如地表草地,泥土等的混合操作) 作用: 比如一个模型就是需要两种材质,刀的金属刀身,木质刀柄,墙的一面是木板, ...
- 洛谷P2867 [USACO06NOV]大广场Big Square
P2867 [USACO06NOV]大广场Big Square 题目描述 Farmer John's cows have entered into a competition with Farmer ...
- 洛谷P2513 [HAOI2009]逆序对数列
P2513 [HAOI2009]逆序对数列 题目描述 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易 ...
- jzoj6008. 【THUWC2019模拟2019.1.18】Sequence (矩阵加速)
题面 茉优最近研究发现,一个人的想愿能力可以认为是字符串S的一个子串S[l,r],而连接值可以认为是这个子串的本质不同子序列个数.现在她想验证她的结论是否正确,于是她给了你Q个询问,希望你帮她来计算, ...