关于诸多编程语言类型介绍
目录
1、强类型语言
1.1、定义
1.2、特点
1.3、语言归类
2、静态类型语言
3、var类型
3.1、概念
3.2、语法和规则
3.3、为什么引入 var
4、优缺点
前言
编程语言中的数据最终都要放到内存中,在内存中存取数据要明确三件事情:数据存储地址、数据的长度以及数据的处理方式。
1、数据存储地址决定了数据放在哪里;
2、数据长度决定了当前数据使用了多少个字节的内存;
3、数据处理方式不仅让计算机能够正确转换数据的内容,不至于导致“乱码”,还让计算机知道如何处理基于该数据的各种运算,比如加减乘除。
关于编程语言的分类如下:
变量名不仅仅是为数据起了一个好记的名字,还告诉数据的存储地址,使用数据时,只要提供变量名即可,变量名会自送转换成数据在内存中的地址。
而数据类型则指明了数据的长度和处理方式,它确定了除地址以外的其它所有信息。
诸如int n;、char c;、float money;这样的变量定义形式就确定了数据在内存中的所有要素。
关于强类型语言的编译检查链路图如下所示:
强类型语言(Strongly Typed Language)是相对于 弱类型语言(Weakly Typed Language)来说的。
1、强类型语言
1.1、定义
它表示在语言的编译或运行过程中,对变量类型有严格限制,不允许隐式类型转换或忽略类型检查。
Java(强类型)示例:
int num = 10;
String s = "Hello";
num = s; // ❌ 编译报错:不兼容的类型
必须显式转换时:
int num = 10;
double d = num; // ✅ 自动类型提升(安全)
int x = (int) 3.14; // ✅ 必须显式转换
弱类型语言的对比(如 JavaScript):
let a = 10; // 数字
a = "abc" + a; // ✅ 自动转换成字符串 "abc10"
console.log(a); // 输出 "abc10"
JavaScript 运行时类型自动转换,灵活但容易引发隐性类型错误。
1.2、特点
1、每个变量/表达式都必须有确定的数据类型(int、double、String...);
2、类型一旦声明,就不能随意改变;
3、编译器会检查类型一致性,不符会直接编译报错(Java是编译期就检查);
4、很多转换必须显式声明(强制类型转换 cast);
1.3、语言归类
如下所示:
2、静态类型语言
很多时候我们会同时听到 静态类型(Static Typed)这个概念。
- 强类型:强调类型检查严格;
- 静态类型:强调在编译期就检查数据类型(编译器在运行前就会知道每个变量的类型);
Java 既是:
- 强类型(类型安全,禁止乱赋值);
- 静态类型(类型在编译期确定);
- 所以编译期就能发现大部分类型错误;
Java 中几乎所有变量和表达式都有显式的类型:
- 基本类型(int、double、boolean...)——值类型;
- 引用类型(String、Object、自定义类...);
- 泛型(Generic)通过类型参数约束集合等对象类型;
如下所示:
3、var类型
3.1、概念
var
不是数据类型,而是一种 局部变量类型推断语法(Local Variable Type Inference)。
- 编译器会根据赋值表达式的右侧类型自动推断变量的静态类型
- 不是动态类型(不像 JS/Python 那样运行时确定类型)
- 编译期仍然是强类型检查 ✅
3.2、语法和规则
介绍:
var name = "Java"; // 推断为 String
var num = 123; // 推断为 int
var list = new ArrayList<String>(); // 推断为 ArrayList<String>
❌ 不允许:
var x; // ❌ 编译错误:必须有初始值(无法推断类型)
var y = null; // ❌ 不能仅用 null 推断
var arr = {1, 2, 3}; // ❌ 必须有明确类型
⚠️注意:
- 只能用于 局部变量、增强 for 循环变量、try-with-resources 的资源变量
- 不能用于:
- 方法参数
- 方法返回类型
- 成员变量(字段)
3.3、为什么引入 var
- 减少冗长声明:尤其在泛型推导时
- 提升可读性(让代码关注右值类型而非重复声明)
- 配合泛型更方便:
// 没有 var 时
Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();// 有 var 时(编译器自动推断)
var map = new HashMap<String, List<Integer>>();
小结:
4、优缺点
1、优点:
- 类型安全(减少运行期未知错误)
- 编译器可优化性能
- IDE 提示更智能(代码补全、重构友好)
2、缺点:
- 编码时需要较多类型声明(Java 10开始引入
var
简化) - 灵活性不如动态弱类型语言(如 JS、Python)
总结
强类型语言在类型安全性和代码健壮性方面具有明显优势,但也带来了一定的灵活性限制。
但是在编译和类型匹配方面,强类型语言对类型一致性的要求使得代码的开发、集成以及跨平台和跨语言的协作变得更为复杂。
参考文章
1、强类型语言(Java、C++、Typescript?等)-CSDN博客文章浏览阅读1.2k次,点赞22次,收藏27次。强类型语言在类型安全性和代码健壮性方面具有明显优势,但也带来了一定的灵活性限制。在编译和类型匹配方面,强类型语言对类型一致性的要求使得代码的开发、集成以及跨平台和跨语言的协作变得更为复杂。因此,在多语言模型集成或异构系统中,如何有效处理这些类型问题成为了一个需要解决的技术挑战。Java和JavaScript在处理泛型(Generics)方面有显著的差异。Java是一种静态类型、强类型的语言,泛型是其类型系统中的一个关键特性。_强类型语言https://blog.csdn.net/m0_55049655/article/details/142327455?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522ccb48aa4c9152bd37d485afaa49e7b88%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=ccb48aa4c9152bd37d485afaa49e7b88&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-142327455-null-null.142^v102^control&utm_term=%E5%BC%BA%E7%B1%BB%E5%9E%8B%E8%AF%AD%E8%A8%80&spm=1018.2226.3001.4187
2、静态语言、动态语言、强类型语言、弱类型语言的区别-CSDN博客文章浏览阅读1.1k次,点赞29次,收藏32次。如果你是一名程序员,那你一定使用过变量、函数参数或者函数返回值,它们都用来表示数据,在编程语言中无处不在;但是,你是否知道它们的真正含义呢?又是否知道它们在后台如何控制计算机的呢?在很多编程语言(比如 C/C++、Java、C# 等)中,定义变量时除了需要指明变量的名字,还需要告诉计算机它是什么类型,比如简单的整数、浮点数、字符串,还有复杂的类、结构体、数组。编程语言中的数据最终都要放到内存中,在内存中存取数据要明确三件事情:数据存储地址、数据的长度以及数据的处理方式。_静态语言https://blog.csdn.net/weixin_42673574/article/details/136784820?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522ccb48aa4c9152bd37d485afaa49e7b88%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=ccb48aa4c9152bd37d485afaa49e7b88&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-136784820-null-null.142^v102^control&utm_term=%E5%BC%BA%E7%B1%BB%E5%9E%8B%E8%AF%AD%E8%A8%80&spm=1018.2226.3001.4187