JavaSE基础语法 - 数据类型
JavaSE基础语法 - 数据类型
记录自己的学习之路,2025年7月20日,周日,晚,天气台风。数据类型学习。
强弱类型语言
- 强类型语言:类型检查严格,变量的类型在声明后不能随意改变,适合大型项目和需要严格类型安全的场景。
- 弱类型语言:类型检查较为宽松,变量的类型可以随时改变,适合快速开发和脚本编写,但需要开发者更加小心处理类型相关的逻辑。
强类型语言:Java、Python(3.x)、C++、C#、Typescript
弱类型语言:PHP、Javascript、Ruby、Perl、Bash(Shell脚本)
Java是一种静态强类型语言。在Java中,变量的类型在声明时必须明确指定,并且一旦声明,变量的类型不能改变。例如:
int number = 10; // 声明一个整型变量
number = "Hello"; // 这会报错,因为类型不匹配
Python是一种动态强类型语言。虽然变量的类型在运行时确定,但Python的类型检查依然严格。如果尝试对不同类型进行不兼容的操作,会抛出错误。例如:
number = 10
number = "Hello" # 这是合法的,因为Python是动态类型语言
result = 10 + "20" # 这会抛出TypeError
JavaScript是一种动态弱类型语言。变量的类型在运行时确定,并且可以随时改变。JavaScript的类型转换非常灵活,但这也可能导致一些类型相关的错误。例如:
let value = 10; // value是数字类型
value = "Hello"; // value现在是字符串类型
let result = 10 + "20"; // 结果是"1020",而不是30
数据类型
-
基本数据类型(4+2+1+1,8种类型)
byte:1个字节,整数类型
short:2个字节,整数类型
int:4个字节,整数类型
long:8个字节,整数类型
float:4个字节,浮点类型
double:8个字节,浮点类型
char:2个字节,字符类型
boolean:1个字节,值只有true和false
-
引用数据类型
类(如String)、接口、数组
查看基本数据类型的取值范围
虽然
byte是基本数据类型,但 Java 提供了一个对应的包装类Byte。可以查看Byte类的源代码来了解一些与byte相关的常量和方法。int、char、boolean等类型同理。

-
示例
public static void main(String[] args) { //整型 int i1=100; //长整型 long i2=998877665544332211L;//要在最后加个L,表示是长整型 //短整型 short i3=235; //浮点型 double d1=3.5; //双精度 double d2=3; float f1=(float)3.5; //单精度 float f2=3.5f; //要在最后加个f,表示是单精度 //布尔类型 boolean true真/false假 boolean isPass=true; boolean isOk=false; boolean isBig=5>8; if(isPass){ System.out.println("通过了"); }else{ System.out.println("未通过"); } //单字符,不能是两个字符,如char f='女人',则会报错 char f='女'; char m='男'; }整型拓展
进制:二进制0b、八进制0、十进制、十六进制0x
示例:
//整型 int i=10; int i2=010; int i3=0x10; System.out.println(i); //10 System.out.println(i2); //8 System.out.println(i3); //16浮点型拓展
浮点类型float, double的数据不适合在不容许舍入误差的金融计算领域。
如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
public static void main(String[] args) { //单精度的1.0不等于双精度的1.0 float f = 0.1f; double d = 1.0/10; System.out.println(f==d); //false //超出范围,+1仍显示相等 float d1 = 2131231231f; float d2 = d1+1; if(d1==d2){ System.out.println("d1==d2"); }else{ System.out.println("d1!=d2"); } }最好完全避免使用浮点数比较 !
大数值:Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数
值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。
字符型拓展
char 类型用来表示在Unicode编码表中的字符。本质都是一些数字。
public static void main(String[] args) { char c1 = 'a'; char c2 = '中'; System.out.println(c1); System.out.println((int) c1); //97 System.out.println(c2); System.out.println((int) c2); //20013 } char c3 = '\u0061'; System.out.println(c3); //a- 转义字符

布尔型拓展
boolean falg = ture;
if (falg = true) {}//新手写法
if (falg) {}//老手写法
//代码要精简
字符串String类拓展
//代码1
String sa=new String("Hello world");
String sb=new String("Hello world");
System.out.println(sa==sb); // false
//代码2
String sc="Hello world";
String sd="Hello world";
System.out.println(sc==sd); // true
代码1:
- 使用
new String()创建字符串时,Java会创建一个新的String对象,即使内容相同,也会分配新的内存空间。 - 在代码中,
sa和sb虽然内容都是"Hello world",但它们是通过new String()分别创建的两个独立的String对象。 - 因此,
sa和sb指向的是不同的内存地址。 - 在Java中,
==运算符用于比较两个对象的内存地址是否相同。 - 由于
sa和sb指向的是不同的对象,因此sa == sb的结果是false。
代码2:
- 当使用双引号直接赋值字符串时(例如
"Hello world"),Java会使用字符串常量池(String Pool)。 - 字符串常量池是一个特殊的内存区域,用于存储字符串常量,以避免重复创建相同内容的字符串对象。
- 如果字符串常量池中已经存在内容为
"Hello world"的字符串对象,那么sc会直接引用这个已存在的对象,而不会创建新的对象。 - 由于
sc和sd都引用了字符串常量池中的同一个对象,它们的内存地址相同。 - 因此,
sc == sd的结果是true。

浙公网安备 33010602011771号