Java基本类型与String、Date转换详解
深入解析Java八种基本数据类型的取值范围,系统掌握从低级到高级的自动转换和向低级的强制转换机制。了解如何通过包装类实现数值间转换,并演示String与原始类型的双向转换方法,以及使用 SimpleDateFormat 对 java.util.Date 进行精确格式化的操作。
结果或目标
理解 Java 基本数据类型的内存占用和取值边界,明确何时发生隐式提升与显式截断风险;掌握在数值类型之间使用包装类作为桥接,以及在 String 与数值类型间进行无损/有损转换的标准做法;学会通过格式化对象将 Date 对象转换为特定模式的字符串表示。
准备条件
- Java Development Kit (JDK),确保具备基础编译环境。
- 理解面向对象基础概念,能够编写并运行简单的
main方法程序。 - 熟悉基本运算符与输出语句
System.out.println的使用。
第1步:认识基本数据类型及边界
Java 提供了八种基本数据类型。其中布尔型只有 true/false;字符型 char 采用 Unicode 编码;其余为数值型。需要特别注意,Java 中没有无符号(unsigned)整数类型。
// boolean: true / false
// char: 16位 Unicode
// byte: 8位 [-128, +127]
// short: 16位 [-2^15, 2^15-1]
// int: 32位 [-2^31, 2^31-1]
// long: 64位 [-2^63, 2^63-1]
// float: 32位 IEEE 754
// double:64位 IEEE 754
日常开发中,除了基本类型,String 和 Date 也是极为常用的类变量,其转换逻辑有别于原始类型间的运算。
第2步:基本类型之间的转换(自动与强制)
类型转换分为三类场景:同层级或跨层级的数值互转、与 String 互转、以及与其他实用类(如 Date)互转。先看纯数值类型间的转换。
2.1 自动类型转换(向上转型)
当由低级向高级转化时,Java 会自动完成转换,不会丢失精度。转换顺序一般遵循:
byte/short/char → int → long → float → double
byte b = 10;
int i = b; // 自动扩容
long l = b; // 自动扩容
float f = b;
double d = b;
对于 char 转整型时,会将其 ASCII 码值赋予目标变量:
char c = 'c';
int ascii = c; // 输出结果为 99
注意:byte、short、char 三者虽然平级,但互相赋值时需要强制转换。例如 char ch = (char) shortVal;。工程实践中,涉及整数运算尽量统一使用 int,避免频繁强转带来的隐患。
2.2 强制类型转换(向下转型)
将高优先级类型赋给低优先级变量时,必须使用显式强制转换符号 (type)。这会存在溢出或精度丢失的风险。
int big = 1234567;
byte small = (byte) big; // 可能因超出字节范围导致数据异常
char chr = (char) big;
2.3 使用包装类进行过渡
在处理不同基本类型之间复杂的类型变换时,可以利用 Java 提供的包装类(Wrapper Classes)作为中介。六类核心包装类对应关系如下:
Boolean↔booleanCharacter↔charInteger↔intLong↔longFloat↔floatDouble↔double
操作流程:先将原始类型装箱为对象,再调用对应的提取方法获取另一种类型的数据。
// Float 转 Double
float f1 = 100.00f;
Float wrapperF = f1; // 自动装箱
double d1 = wrapperF.doubleValue();
// Double 转 Integer
double d2 = 100.99;
Double wrapperD = new Double(d2);
int i2 = wrapperD.intValue(); // 小数部分将被截断
各包装类还提供构造函数直接接收对应原始参数,例如 new Integer(val) 或 new Double(val)。
第3步:数值类型与 String 相互转换
几乎所有继承自 java.lang.Object 的类都拥有 toString() 方法,这为实现“数值→文本”提供了通用途径。
3.1 数值转 String
推荐两种常用方式:一是使用包装类的实例方法,二是直接使用加号拼接。
int n = 10;
float f = 3.14f;
// 方法一:String.valueOf() 或 包装类 toString()
String sNum = String.valueOf(n);
String sFloat = Float.toString(f);
// 方法二:空字符串拼接(最简洁通用)
String sMixed = n + "";
String sResult = n + "_" + f;
3.2 特殊字符数字提取为数值
若想把单个像 '1' 这样的字符当作数学上的 1 处理,而非取其 ASCII 码,应使用以下两种方式之一:
char digitChar = '1';
int valA = Character.getNumericValue(digitChar); // 安全读取数值
int valB = digitChar - '0'; // ASCII 减法技巧
第4步:Date 与其他类型的关联
java.util.Date 本身并不提供直接的数值加减接口,但在内部维护了一个长整型的毫秒时间戳(Epoch时间)。我们可以利用它实现日期与时间的互换。
4.1 毫秒数与 Date 互转
import java.util.Date;
long millis = System.currentTimeMillis();
Date now = new Date(millis); // 毫秒转日期对象
long extractedMillis = now.getTime(); // 日期对象转毫秒
4.2 使用 SimpleDateFormat 进行格式化(Date → String)
引入 java.text.SimpleDateFormat 和 java.util.Date,定义好目标模板即可得到定制格式的字符串:
import java.text.SimpleDateFormat;
import java.util.Date;
Date dt = new Date();
// 生成类似 20231025 的紧凑格式
SimpleDateFormat sdfCompact = new SimpleDateFormat("yyyyMMdd");
String compactStr = sdfCompact.format(dt);
// 单独拆分年月日组件
SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
SimpleDateFormat sdfMonth = new SimpleDateFormat("MM");
SimpleDateFormat sdfDay = new SimpleDateFormat("dd");
String yearPart = sdfYear.format(dt);
String monthPart = sdfMonth.format(dt);
String dayPart = sdfDay.format(dt);
// 也可以通过 getTime() 拿到的长整型做进一步计算
以上即为 Java 数据类型转换的详细内容,更多关于 Java 基础语法与进阶的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









