5-1. java变量和数据类型
【摘要】 Java系列第五课
1、计算机中变量的存储方式
图示详解:
我们在电脑中每运行一个程序,相当于在计算机内存中开辟了一块空间(分配一
块内存)。例如:QQ有扣扣的运行内存,微信有微信的运行内存。当然,运行java程
序时,计算机也分配给java虚拟机jvm一个虚拟机内存。
jvm虚拟机内存,好比一个“大广场”,里面盖了很多很多个“小房子”(内存空间)
当我们村存储一个整数22进去,这个jvm虚拟机内存,会分配一间“小房子”给22,当
然这块小房子会附带一个地址id,当我们想要找到这个22的时候,带着这个地址id就
可以找到22。
当然,我们肯定不会这么做,因为id太长了,也没有规律,不便于记忆,就好
像我们访问百度的网站,使用的是www.baidu.com,而不是直接输ip,因为我们
记不住这么多ip,因此,我们也记不住这么多的id。
于是,我们给22住的地方取了一个“别名”,比如“age”,当我们叫“age”,22
便会回应你(因为一个房子只能住一个人,不同房子不能取相同的别名),我们找到
了age,就相当于找到了22。
2、什么是变量?
1)内存中的一个存储空间,空间中的数据可以改变。每一块内存只能存一个数据。
2)同一个作用域内(就是同一对大括号内),变量不要同名。
3)变量一定要先声明,再使用。(java语言属于“强类型”的语言,使用变量之前,必
须先声明变量的类型。)
4)局部变量必须初始化之后才可以使用,在主方法中定义的变量,叫做"局部变量"。在主方法之外,类之内定义的变量叫做"成员变量","成员变量"不进行初始化也可以使用,因为系统会帮它进行初始化。
3、变量的命名规则
1)标识符的命名规则:
- 由字母,数字,下划线_,$组成。
- 不能以数字开头。
- 不能是java的关键字。(java中关键字如下)。
- 不能是true false null这样的字面值 。
java中常用的关键字如下:
注:关于保留字的说明:const、goto,保留字在java中没有实际用处,我们不用管它就行,只要记住不用保留字作为变量名就可以啦。
2)变量名的命名规范:
骆驼命名法:多个单词组成,第一个单词首字母小写,后边单词首字母大写。
- age
- ageValue
- ageValueNumber
4、变量声明与初始化
声明:给计算机打一个招呼,告诉它,我想存一个整数。
初始化:在内存中开辟一块空间,赋一个值,把数字存进去。
因此,变量只有初始化以后,才算是真正创建成功了。
1)以int整型为例
Ⅰ 先声明,再初始化
# 声明一个整型变量,叫做“age”
int age;
# 初始化
age = 22;
Ⅱ 边声明,边初始化
int age = 22;
5、变量交换(很重要,记住)
交换原理如图所示:
代码如下:
/** 示例:变量值互换 */
public class Exchange{
public static void main(String[] args) {
int n1 = 22;
int n2 = 33;
int temp;
temp = n1;
n1 = n2;
n2 = temp;
System.out.println("n1的值为:" + n1);
System.out.println("n2的值为:" + n2);
}
}
6、java中的数据类型
我们知道,创建一个变量,相当于在内存中开辟了一块儿空间,空间有大小,就好比一间大房子,假如你只放一本书就显得很浪费了。
因此,在声明变量的时候,就相当于给这个变量一个空的房子,房子的大小就与你存放东西得多少有关,东西少,就给你一个小房子;东西多,就给你大房子。
1)整型
整型 空间大小 取值范围
字节类型 byte 1字节 -128 到 127
短整数类型 short 2字节 -32768 到 32767
整数类型 int 4字节 见下面
长整数类型 long 8字节 见下面
查看不同整型的取值范围的代码如下:
public class Var {
public static void main(String[] args) {
System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);
System.out.println("--------------");
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
System.out.println("--------------");
System.out.println(Integer.MIN_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println("--------------");
System.out.println(Long.MIN_VALUE);
System.out.println(Long.MAX_VALUE);
System.out.println("--------------");
}
}
结果如下:
-128
127
--------------
-32768
32767
--------------
-2147483648
2147483647
--------------
-9223372036854775808
9223372036854775807
--------------
2)浮点类型
单精度 float 4字节
双精度 double 8字节
查看浮点类型的取值范围的代码如下:
public class Var2 {
public static void main(String[] args) {
System.out.println(Float.MIN_VALUE);
System.out.println(Float.MAX_VALUE);
System.out.println("--------------");
System.out.println(Double.MIN_VALUE);
System.out.println(Double.MAX_VALUE);
System.out.println("--------------");
}
}
结果如下:
1.4E-45
3.4028235E38
--------------
4.9E-324
1.7976931348623157E308
--------------
3)字符类型
字符类型 空间大小 取值范围
char 2字节 0 到 65535
像"a" "中" "2"
4)布尔类型
boolean
像true、false
7、引用数据类型
字符串 String
数组 [ ]
类 class
接口 interface
8、习题
操作如下:
public class Test{
public static void main(String[] args){
String brand = "嘉士利";
int weight = 1000;
double price = 17.8;
System.out.println(brand);
System.out.println(weight);
System.out.println(price);
}
}
9、数据类型之间的相互转换
1、类型转换:一种类型的值赋值给另一种类型的变量。
1)自动类型转换
前提:类型兼容。范围小的 赋值给 范围大的。
注:取值范围double>=int,即double可以包括int,但是int不能包括double。因此,整型可以自动转换为浮点型,但是浮点型转换为整型,就会报错,提示“不兼容的类型: 从double转换到int可能会有损失”。
public class Test{
public static void main(String[] args) {
int i = 12;
double d = i;
// 发生了类型自动转换,将整型转换为浮点型。
// 前提:两者之间数据类型是兼容的。
// 因为double类型可以完全包括这个int类型。
System.out.println(d);
/*
思考:假如我们将double类型,赋值给int类型,可不可以呢?
回答:不可以。因为int类型肯定是不可能包括double类型的。
会出现这个错误:Test.java:13: 错误: 不兼容的类型: 从double转换到int可能会有损失
double d1 = 12.3;
int i1 = d1;
System.out.println(i1);
*/
}
}
自动类型转换的2条线:
2)强制类型转换(会出现类型损失)
范围高的 赋值给 范围低的。
语法格式如下:
(类型) 值;
public class Test{
public static void main(String[] args) {
double n = 54.78;
int i = (int) n;
System.out.println(i);
}
}
# 结果是:
54
10. 习题
这里涉及到一个新的知识:“数据类型提升”。
数据类型提升:参与运算的时候,类型低的和类型高的,进行运算。类型低的会提升为类型高的类型的数据。
public class Test{
public static void main(String[] args) {
int i = 2;
int sum;
sum = (int) (i * 5 + 5.58); # int + double 变为 double + double
System.out.println(sum);
}
}
# 结果为:
15
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)