变量和数据类型
一、变量的基本概念
当需要在程序中记录单个数据内容时,则声明一个变量即可,而声明变量的本质就是在内存中申请一个存储单元,由于改存储单元中的数据内容可以改变,因此得名为“变量”。
1、变量的声明方式
-
数据类型 变量名 = 初始值;
其中‘= 初始值’可以省略,但‘;’不能省略。
2、标识符的命名法则(笔试)
- 有数字、字符、下划线以及$等组成,其中数字不能开头。
- 不能使用Java中的关键字,所谓关键字就是Java语言用于表示特殊含义的单词。
- 区分大小写,长度没有限制但不宜过长。
- 尽量做到见名知意,支持中文但不推荐使用。
- 标识符可以给类/变量/属性/方法/包 起名字。
案例:
/*
案例:提示用户键盘输入自己的姓名和年龄信息并打印出来。
*/
//导入java目录中util目录中的Scanner类
import java.util.Scanner;
public class OwnTest {
public static void main (String [] args) {
//1. 声明两个变量用于记录姓名和年龄
//2. 提示用户从键盘输入姓名和年龄信息并放入到变量
//3. 打印变量的数值
//创建一个扫描器来扫描键盘输入的内容,System.in代表键盘输入
Scanner sc = new Scanner(System.in);
System.out.println("输入自己的姓名和年龄信息");
//通过扫描器读取一个字符串数据放入变量name中
String name = sc.next();
//通过扫描器读取一个整数放入变量age中
int age = sc.nextInt();
//System.out.println("name = " + name);
//System.out.println("age = " + age);
//尽可能减少重复代码
System.out.println("name = " + name + "," + "age = " + age);
}
}
二、数据类型
Java语言中数据类型分为两大类:
-
基本数据类型:
byte、short、int、long、float、double、boolean、char
(占用字节)
-
引用数据类型
数组、类、接口、枚举、标注
1、进制之间转换
-
正十进制转换为二进制的方式:
-
除2取余,使用十进制整数不断地除以2取出余数,知道商为0时将余数逆序排序。
-
拆分发,将十进制整数拆分为若干二进制权重的和,有该权重下面写1,否则写0。
45=> 32+8+4+1 ....128 64 32 16 8 4 2 1 0 0 1 0 1 1 0 1
-
-
正二进制转换为十进制的方式
加权法,使用二进制中的每个数字乘以当前位的权重再累加起来。
-
负十进制转换为二进制的方式
现将十进制的绝对值转换为二进制,然后按位取反再加1.
负数的需要补码:按位取反,再加1。
-
负二进制转换为十进制方式
先减1再按位取反,合并为十进制整数后添加负号。
2、单个字节表示的整数范围
- 计算机中单个字节表示八位二进制位,其中最高位(最左边)代表符号位,使用0表示非负数,1表示负数。
- 非负数表示范围:0000 0000 ~ 0111 11111 => 0 ~ 127 => 0~2^7-1
- 负数表示范围:1000 0000 ~ 1111 1111 => -128 ~ -1 => -2^7 ~ -2^0
- 单个字节表示的整数范围:-2^7 ~ 2^7-1,也就是-128 ~127。
3、整数类型
-
Java语言中整数类型有:byte、short、int、long,推荐int类型
-
byte,占1个字节,表示范围:-2^7 ~ 2^7-1
-
short,占2个字节,表示范围:-2^15 ~ 2^15-1
-
int,占4个字节,表示范围:-2^31 ~ 2^31-1
-
long,占8个字节,表示范围:-2^63 ~ 2^63-1;long描述最大的整数,若描述比long类型还大的数据则使用java.math.BigInteger类型
-
在Java程序中直接写出的整数类型叫做直接量/字面量/常量,默认为int类型。若希望表达更大的直接量,则在直接量的后面加上l或者L,推荐L。
int i = 25; byte b1 = (byte)i; //byte b1 = i; 错误: 不兼容的类型: 从int转换到byte可能会有损失 System.out.println("b1 = " + b1);
4、浮点数类型
-
Java语言中描述小数的数据类型:float和double,推荐double类型
-
float,占4个字节,叫做单精度浮点数,可以表示7位有效数字,范围:-3.403E38 ~ 3.403E38.
-
double,占8个字节,叫做双精度浮点数,可以表示15位有效数字,范围:-10798E308 ~ 1.798E308.
-
Java程序中直接写出的小数数据叫做直接量,默认为double类型。若用float类型的直接量,则需要在直接量后面加上f或F。
浮点数直接运算存在误差,若希望实现精确运算则借助java.math.BigDecimal类型。
System.out.println("sum =" + (0.1 + 0.2)); // sum =0.30000000000000004 浮点数运算存在误差,若希望实现精确运算则需要借助java.math.BigDecimal类型
5、布尔类型
- Java语言中描述真假信息的类型:boolean,数值只有:true和false。
- 布尔类型在内存空间所占大小没有明确规定,可以认为是1个字节。
6、字符类型
-
Java语言中描述单个字符的数据类型:char类型,如‘a’、‘中’等
-
char,占2个字节且没有符号位,表示范围:0 ~ 65535。
-
计算机底层只识别0和1的二进制序列,对‘a’这样的数据无法直接在计算机中存储。为了使得该数据能够存储起来就给该数据指定一个编号,然后将编号存储起来,该编号就叫做ASCII。
/* 编程实现字符类型的使用 */ public class CharTest { public static void main(String [] args) { //声明一个char类型的变量并初始化 char c1 = 'a'; //打印变量的数值 System.out.println("c1 = " + c1); System.out.println("对应的编号是: " + (int)c1);//对应的编号是: 97,表示将char类型的c1强制转换为int类型并打印 97 System.out.println("---------------------------------"); //char类型可以直接初始化,赋值为编号。 char c2 = 98; System.out.println("c2 = " + c2); System.out.println("对应的编号是: " + (int)c2); } }
-
要求掌握的ASCII:‘0’-48,‘A’-65,‘a’-97,空格-32,换行符-10
-
Java字符类型采用Unicode字符集编码。Unicode是世界通用的定长字符集,所有的字符都是16位(2个字节)。
-
要求掌握的转义字符:\ " - " ; \ ' - ' ; \ \ - \ ; \t - 制表符 ; \n - 换行符
//使用Unicode字符集来表示一下我的名字 \u0073\u006f\u006c\u0064\u0069\u0065\u0072(中文转换)
char c3 = '\u0073';
char c4 = '\u006f';
char c5 = '\u006c';
char c6 = '\u0064';
char c7 = '\u0069';
char c8 = '\u0065';
char c9 = '\u0072';
//使用Unicode字符集来表示一下我的名字 soldier(ASCII转换)
/*
char c3 = 's';
char c4 = 'o';
char c5 = 'l';
char c6 = 'd';
char c7 = 'i';
char c8 = 'e';
char c9 = 'r';
//以ASCII码进行转换报错
*/
System.out.println("我的名字:" + c3 + c4 + c5 + c6 + c7 + c8 + c9);//我的名字:soldier
System.out.println("---------------------------------");
//特殊字符的使用 双引号本身的2个含义:a.字符串的开头个结尾标记 b.双引号自身
// \转义就是转换原有的含义
System.out.println("我想过过\"过过过过的生活");// \" - "
System.out.println("我想过过\'过过过过的生活");// \' - '
System.out.println("我想过过\\过过过过的生活");// \\ - \
System.out.println("我想过过\t过过过过的生活");// \t - 制表符
System.out.println("我想过过\n过过过过的生活");// \n - 换行符
三、数据类型转换
基本数据类型之间的转换
-
基本数据类型转换分为:自动类型转换盒强制类型转换
自动类型转换:从小类型到大类型的转换
byte=>short=>int=>long=>float=>double char=>int
强制类型转换:从大类型转换到小类型之间的转换
语法格式:变量名 = (目标类型)源类型变量名;
强转有风险,操作需谨慎。
/*
编程实现基本数据类型转换
*/
public class TransformTest {
public static void main(String [] args) {
//声明两个变量并初始化
byte b1 = 10;
short s1 = 20;
//打印变量的数值
System.out.println("b1 = " + b1);
System.out.println("S1 = " + s1);
System.out.println("-----------------");
//自动转换后
s1 = b1;
System.out.println("S1 = " + s1);
System.out.println("S1 = " + s1);
System.out.println("-----------------");
//强制类型转换后
s1 = 200;
b1 = (byte) s1;
System.out.println("b1 = " + b1);//b1 = -56 200超出byte范围造成数据丢失
System.out.println("S1 = " + s1);//S1 = 200
System.out.println("-----------------");
s1 = 30;
b1 = (byte) s1;
System.out.println("b1 = " + b1);//b1 = 30 30没有超出byte范围造成数据丢失
System.out.println("S1 = " + s1);//S1 = 30
}
}
文章内容输出来源:拉勾教育Java高新训练营。
本文来自博客园,作者:寒露凝珠,转载请注明原文链接:https://www.cnblogs.com/china-soldier/p/14815458.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现