前言
程序=数据+算法,变量和常量的作用是通过程序把日常生活中的数据记录到计算机内存中进行运算。
事物分静态和动态,数据亦是如此。
常量是反映数据静止状态的量,变量就是反映数据运动变化状态的量。
常量就是帮程序员把日常生活中的一些固定数据录入到程序中。
变量就是帮助程序员记录程序运行中一些会随着程序执行和运算而改变的量 ,变量有以下特点。
- 变量本质是内存中的一个存储区域
- 该区域有自己的名称(变量名)和类型(数据类型)和值
- Java中每个变量必须先声明,再赋值,然后才能使用
- 该区域的数据可以在同一类型范围内不断变化
- Java 中的变量有四个基本属性:变量名,数据类型,存储单元和变量值
一、常量和变量
常量和变量可以帮助我们在内存中临时保存程序执行所需要的数据;
1.常量
常量是程序运行过程中,常量的值从头到位都没有发生过改变的量,常量就是我们平时写在纸上的字面值(1、3.14、-5.2、奔驰、男)。
整数常量(正整数与负整数): 直接写 6,-6
小数常量(整小数与负小数): 直接写 6.6,-6.6
字符常量(被单引号‘’包裹的单个字符):‘我’,'A’
字符串常量:(所有被双引号“”包裹的内容): “Hello World” ,"张根"
布尔常量(表示真或者假):true、false
空常量:只有一个值null,用于给引用数据类型的引用赋值,注意: 空常量不能直接打印空常量
2.变量
变量定义格式如下和数学中的等号(=)不同,在Java中使用赋值运算符(=)给变量赋值时,可以从右往左看,把值1赋值给变量A。
数据类型 变量A =值1; //从右往左看,把值1赋值给变量A
二、Java的基本数据类型
数据类型其实就是类名,当前对象是通过哪个类实例化出来的对象,当前对象就属于哪个数据类型。
Student student1 = new Student("张三", 29);
//student1是Student数据类型
Java是强类型语言,每一个变量声明之前,需要首先明确这个变量所属的数据类型;
Java中一切皆对象, 有哪些数据类型(类)就决定了能实例化出哪些变量(对象);
以下将介绍Java中都有哪些数据类数据类型?
在Java中定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写,避免和1混淆)。
整数常量默认是int类型,整数太大可能超出int范围。
定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。
因为浮点数的默认类型是double, double的取值范围是大于float的,类型不兼容。
Java有以下几种数据类型;
1.整数型
由于Java诞生在1990年,那时候内存比较稀缺,为了可以让程序员在编程是尽可能地节省内存空间,开发者设计了byte、int、short、long 4种不同数据类型,来表示不同大小范围的整数。
byte: 占8位, 1个字节,可表示 -128~127之间的整数。
short: 占16位,2个字节,可表示 -32768~32767之间的整数。
int: 占32位,4个字节,可表示 -21亿~21亿之间的整数。
long 占64位,8个字节,可表示 -9,223,372,036,854,775,808(-2^63)之间的整数
package var; import sun.security.acl.WorldGroupImpl; public class Var4 { public static void main(String[] args) { byte English_score = 100; //byte short total_score = 660; //short int Chinese_population = 130000000; //int long world_population = 6400000000L; //long System.out.printf("英语分数: %d 高考分数:%d 中国人口:%d 世界人口:%d\n", English_score, total_score, Chinese_population, world_population); } }
整型的运算操作
package var; public class Var1 { public static void main(String[] args) { // 先声明1个变量 int a1 = 10; System.out.println(a1); a1 = 20; System.out.println(a1); int a = 10; int b = 20; System.out.println(a + b); System.out.println(a - b); System.out.println(a * b); System.out.println(a / b);//如果运算两端都是int,结果还是int类型 System.out.println(a % b); //取余 System.out.println(10 % 3); } }
2.浮点型
在Java中可以使用float和double这2种数据类型表示浮点数;
float类型的浮点数 占32位, 最多可保留小数点后面的8位;
double类型的浮点数 占64位,最多保留小数点后面的17位;
注意:当多个double和float类型的变量进行算数赋值运算时结果会变成double类型。
double pi=3.1415F; float r=3.23F; double area=pi*r*r; System.out.println(area);
3.boolean 布尔值
我们使用boolean类型保存1种状态,这1种状态要么是 true 要么是false。
布尔类型主要用做条件判断,进而对流程控制。
package var; public class Var3 { public static void main(String[] args) { double incomes = 1000; double costs = 20000; System.out.println(incomes > costs); //false:收入大于花销? System.out.println(incomes < costs); //true 收入小于花销? System.out.println(incomes == costs); //false收入等于花销吗? System.out.println(incomes != costs); //true收入不等于花销吗? } }
4.char 字符
char、String数据类型的变量其本质是保存在内存和硬盘中的整型数字,这就需要依赖码表(ASCII)码表的作用如下:
计算机是一个二货,只能存储0和1,所以存储到计算机中的所有内容都会转换成0和1进行存储
所以我们在计算机中存储的字符也不例外,也需要把字符转换成0和1进行存储
问题: 如何把字符转换成对应的0和1进行存储呢?
解决方案:
编码表:就是将人类的文字和一个十进制数进行对应起来组成一张表格。
存储字符时:需要查找ASC码表,找到字符对应的数字,将数字转换为二进制数存放到计算机中。(编码过程)
使用字符时:将对应的二进制数转换为十进制 找到ASC表中对应的字符 显示出来。(解码过程)
总结:
存储字符时:
'a' --> 97 --> 1100001 26个小写字母的ASCII码值是连续的,相差1
'A' --> 65 --> 1000001 26个大写字母的ASCII码值是连续的,相差1
'0' --> 48 --> 110000 10个数字字符的ASCII码值是连续的,相差1
小写字母的ASCII码值比对应的大写字母多32
使用字符时
1100001 --> 97 --> 'a'
1000001 --> 65 --> 'A'
110000 --> 48 --> '0'
在Java中1个英文字符在内存和硬盘中占8位(1个字节),1个汉字占16位(2个字节);
char a = 97; char b = 98; char c = 99; System.out.println(a); //a System.out.println(b); //b System.out.println(c); //c
5.String 字符串
以上得知:1个字符本质就是内存中的1个Unicode码表中的数字,byte数据类型占8位;
1个字符串是由多个字符连起来的,所以1个字符串可以使用1个数字类型的数组表示。
byte[] byteArray = new byte[]{65, 66}; char[] charArray = new char[]{67, 68}; System.out.println(new String(byteArray)); //AB System.out.println(new String(charArray)); //CD
String类可以通过接收1个byte数组/char数组,实例化出1个字符串;
public static void main(String[] args) { String s1 = "Hello12345World~!#$"; s1 = lowertoUpperCase(s1); System.out.println(s1); s1 = uppertolowerCase(s1); System.out.println(s1); } //1.小写字符串变大写 public static String lowertoUpperCase(String original) { char[] chars = original.toCharArray(); for (int i = 0; i < chars.length; i++) { char currentChar = chars[i]; if (currentChar >= 'a' && currentChar <= 'z') { chars[i] -= 32; } } return new String(chars); } //2.大写字符串变小写 public static String uppertolowerCase(String original) { char[] chars = original.toCharArray(); for (int i = 0; i < chars.length; i++) { char currentChar = chars[i]; if (currentChar >= 'A' && currentChar <= 'Z') { chars[i] += 32; } } return new String(chars); }
6.基本数据类型之间的转换
Java中类型转换简单理解就是不同数据类型的变量相互赋值。
基本类型排序为以下顺序:(byte-->short,char)-->int--->long--->float--->double
1.自动类型转换:使用1个表示范围小的变量给1个表示范围大的变量赋值。
2.强制类型转换:使用1个表示范围大的变量给1个表示范围小的变量赋值。
目标数据类型 变量名 (目标数据类型)更换的值。
package var; import sun.security.acl.WorldGroupImpl; public class Var4 { public static void main(String[] args) { int a = 10; long b = a; System.out.println(b); //小数据转大数据是安全的 long c = 10; // int d =c; //大数据转小数据是不安全有风险的,必须强制转换 int d = (int) c; System.out.println(d); long c1 = 1000000000000L; int d1 = (int) c1; //大数据转小数据出现内存溢出,程序不可控了 System.out.println(d1); //-727379968 } }
7.基本数据类型之间的运算
多个Java基本数据类型变量,在进行算数赋值运算时会发生数据类型转换现象, 该现象遵循一下规则;
A.相同数据类型之间
相同数据类型之间运算,得到的结果一定还是这个数据类型;
int + int =int;
B.不同数据类型之间
首先,把小的数据类型自动转换成大的数据类型,再进行运算,得出的结果一定是大的数据类型;
int + int =long;
C.特殊的byte、short、char
由于byte、short、char占用的位数少,可表示的数字范围有限,
所以当它们进行运算之后的结果可能会需要更大的内存去存储;
为了避免运算造成内存溢出,我们就需要使用比byte、short、char更大的数据类型来存储运算后的结果;
byte + byte = int; 结果至少是int;
package var; import sun.security.acl.WorldGroupImpl; public class Var4 { public static void main(String[] args) { byte a = 100; byte b = 120; // byte c =a+b; //byte无法表示a+b的和 int c = a + b; System.out.println(c); } }
三、使用Java基本数据类型
程序=数据结构+算法,所以任何语言都要支持我们输入各种类型的信息数据。
import java.util.Scanner; public class Student{ public static void main(String[] args){ //键盘录入学生信息:姓名、年龄、身高、和性别 String greeting="\n------欢迎来到清花大学------\n"; System.out.println(greeting); Scanner sc = new Scanner(System.in); System.out.print("请输入姓名: "); String name= sc.next(); System.out.print("请输入性别: "); char charGender=sc.next().charAt(0); System.out.print("请输入年龄: "); int age=sc.nextInt(); System.out.print("请输入身高: "); double heigh=sc.nextDouble(); System.out.printf("该学生的姓名为:%s,性别:%c,年龄:%d,身高:%f\n",name,charGender,age,heigh); } }
参考