【JavaSE】数据类型与变量
JAVA之父:詹姆斯·高斯林 (James Gosling)
前言:
大家好,我是程序猿爱打拳。今天我给大家讲解的是Java基础中的数据类型。主要讲解的是各个类型的应用场景以及注意事项。
目录
1.数据类型
2.常量与变量
2.1常量
2.2变量
3.整型变量
3.1字节型
3.2短整型
3.3整型
3.4长整型
4.浮点型变量
4.1单精度浮点型
4.2双精度浮点型
5.字符型变量
6.布尔型
7.类型转换
7.1自动类型转换(隐式)
7.2强制类型转换(显式)
7.3类型提升
8.字符串类型
1.数据类型
首先Java提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。其中四个整型分为:字节型、整型、短整型、长整型,两个浮点型分为:单精度浮点型和双精度浮点型。
数据类型 | 说明 | 占字节数 |
---|---|---|
byte | 字节型 | 1字节 |
short | 短整型 | 2字节 |
int | 整型 | 4字节 |
long | 长整型 | 8字节 |
float | 单精度浮点型 | 4字节 |
double | 双精度浮点型 | 8字节 |
char | 字符型 | 2字节 |
boolean | 布尔型 | 未知,但Oracle公司虚拟机中占1字节 |
整型和浮点型他们都是变量,何为变量?下面我就来讲解。
2.常量与变量
2.1常量
常量在计算机中我们认为是永远不会发生改变的量。现实生活中我们可以理解为父与子的关系,儿子永远都是爸爸的孩子,这是改变不了的。
2.2变量
变量在Java里面是我们认为可以发生改变的量,首先我们要知道定义变量的语法格式为:数据类型 变量名 = 初始值;
例如一个名为a的变量。初始化是10我们对它进行改变为20,这就是一个变量a。对照以下程序理解:
public class Blog {public static void main(String[] args) {int a=10;System.out.println("变量a的初值为:"+a);a=20;System.out.println("改变后的a值为:"+a);}
}
输出为:
以下为变量的几个定义方式:
//方法一:在定义时给出初始值
int a =10;
System.out.println(a);
//方法二:在定义时没有给初始值,但使用前必须设置初值
int b;
b = 10;
System.out.println(b);
//在方法二定义后,如果在使用这个变量前没有赋值,编译器会报错
int b;
System.out.println(b);
b = 10;
3.整型变量
我们知道变量的定义格式为数据类型 变量名 = 初始值;并且我们知道整型变量里面包含的几个类型都是用来表示数字的,那么整型变量的取值范围怎么求呢?我们可以使用各个类型的包装类.MIN_VALUE和.MAX_VALUE来分别求出最小值和最大值。
例如我要求整型int的最小值与最大值我们可以这样做:Integer.MIN_VALUE和Integer.MAX_VALUE这样我们就能求出整型的取值范围。各个数据类型的包装类如下表所示:
数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
3.1字节型
我们已经知道变量的定义和求取值范围方法后,来定义一个字节型变量num=10并求出字节型变量的范围:
import java.util.Scanner;public class Blog {public static void main(String[] args) {//定义一个字节型变量b=10byte b = 10;System.out.println(b);//求字节型变量的取值范围System.out.println(Byte.MIN_VALUE);System.out.println(Byte.MAX_VALUE);}
}
结果如图所示:
注意事项:
1. byte在任何系统下都占1个字节
2. byte的范围是:-128 ~ 127
3. 字节的包装类型为Byte
3.2短整型
相信大家定义数据的过程已经熟门熟路了,我们直接定义一个短整型变量并求出短整型范围:
import java.util.Scanner;public class Blog {public static void main(String[] args) {//定义一个短整型变量a=10short a = 10;System.out.println(a);//求短整型变量的取值范围System.out.println(Short.MIN_VALUE);System.out.println(Short.MAX_VALUE);}
}
输出结果为:
注意事项:
1. short在任何系统下都占2个字节
2. short的表示范围为:-32768 ~ 32767
3. 使用时注意不要超过范围(一般使用比较少)
4. short的包装类型为Short
3.3整型
定义一个整型变量num=10并求出整型变量取值范围:
import java.util.Scanner;public class Blog {public static void main(String[] args) {//定义一个整型变量num=10int num = 10;System.out.println(num);//求整型变量取值范围System.out.println(Integer.MIN_VALUE);System.out.println(Integer.MAX_VALUE);}
}
输出结果为:
注意事项:
1. int不论在何种系统下都是4个字节
2. 推荐使用方式一定义,如果没有合适的初始值,可以设置为0
3. 在给变量设置初始值时,值不能超过int的表示范围,否则会导致溢出
4. 变量在使用之前必须要赋初值,否则编译报错
5. int的包装类型为 Integer
3.4长整型
为了区分长整型与整型,我们一般在数字后面加上L或l。例如定义一个长整型变量num=10,我们会这样写:long num =10L;或long num =10l;
import java.util.Scanner;public class Blog {public static void main(String[] args) {//定义一个长整型变量num=10long num = 10L;System.out.println(num);//求整型变量取值范围System.out.println(Long.MIN_VALUE);System.out.println(Long.MAX_VALUE);}
}
输出结果为:
注意事项:
1. 长整型变量的初始值后加L或者l,推荐加L
2. 长整型不论在那个系统下都占8个字节
3. 长整型的表示范围为: -2的63次方~ 2的63次方-1
4. long的包装类型为Long
思考:byte、short、int、long都能定义整型变量为啥要区分这么开呢?
就好比生活中,衣服的尺码。衣服有婴儿装和成人装,我们成人不会穿婴儿装。类型也是如此,数字越大我们就需要更大的范围类型来定义。
4.浮点型变量
浮点型变量分为单精度浮点型和双精度浮点型两类,相信学过C语言的伙伴已经了解到了。但Java里面定义浮点型时需要一些细节,下面我就来一一讲解。
4.1单精度浮点型
定义一个单精度浮点型变量我们得在数字的后面加上f或者F,因为我们的定义的时候不加以说明编译器会默认变量为双精度浮点型。例如定义一个单精度浮点型num=10格式可以写成这样:float num =10f;或float num =10F;
public class Blog {public static void main(String[] args) {//定义一个浮点型变量num=1float num=1.0F;System.out.println(num);}
}
输出结果为:
注意事项:
1.float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准。
2.由于float表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float。
3. float的包装类型为Float。
4.2双精度浮点型
正常定义一个双精度浮点型变量:
public class Blog {public static void main(String[] args) {double num =3.14;System.out.println(num);}
}
输出结果:
一段神奇的代码:
public class Blog {public static void main(String[] args) {int a = 1;int b = 2;System.out.println(a/b);}
}
输出结果:
上述代码以我们的理解应该是输出0.5,但在 Java 中, int 除以 int 的值仍然是 int(会直接舍弃小数部分)。如果想得到 0.5, 需要使用 double 类型计算。如:
public class Blog {public static void main(String[] args) {double a = 1;double b = 2;System.out.println(a/b);}
}
输出结果:
注意事项:
1. double在任何系统下都占8个字节
2. 浮点数与整数在内存中的存储方式不同,不能单纯使用相同的形式来计算
3. double的包装类型为Double
5.字符型变量
字符型见名知意我们可以定义一些关于字符的内容:
public class Blog {public static void main(String[] args) {char a = 'A';char b = '?';char c = '1';char ch='帅';System.out.println(a);System.out.println(b);System.out.println(c);System.out.println(ch);}
}
输出结果:
上述程序中,我定义了一个英文字母A、一个字符?、一个字符1、一个帅字。
注意事项:
1.在定义字符型内容时用英文状态下的单引号括起来如'A'。
2.计算机中的字符本质上是一个整数。 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符,因此一个字符占用两个字节,表示的字符种类更多。
6.布尔型
布尔型也不是很难理解,我们只需要知道布尔类型表示真(true)或假(false)就完了。我们结合代码来展示:
public class Blog {public static void main(String[] args) {boolean a = true;boolean b = false;System.out.println(a);System.out.println(b);}
}
输出结果:
相信大家已经学过C语言,其实在C里面也是有boolean类型的,只是我们不常用到。还有在计算机中1表示真,0表示假。在boolean类型中我们却不能认为1表示true,0表示false。
当我们把一个布尔类型初始化为1时,会出现红色波浪线,代表着两个类型不兼容。
注意事项:
1.boolean类型只有两种取值true和false,它们分别表示真和假。
2.Java中boolean类型和int类型不能相互兼容,不存在1代表true,0代表false。
3.Java中没有明确规定boolean占几个字节,也没有专门来处理boolean的字节码 指令,因此我们认为boolean占字节未知,但Oracle公司虚拟机中占1字节
4.boolean的包装类为Boolean。
7.类型转换
Java是一个强类型编程语言,当不同类型相互赋值时就会进行类型转换。分为自动类型转换(隐式)、强制类型转换(显式)。
当我这样做:
public class Blog {public static void main(String[] args) {int a =10;long b =20L;b = a;//可以编译通过a = b;//编译失败}
}
输出结果:
我们不难理解,上述代码中我们可以看出。Java里面只能让低类型变量的值赋值给高类型变量的值。
7.1自动类型转换(隐式)
隐式类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。下面我来举几个例子来理解:
例1
public class Blog {public static void main(String[] args) {System.out.println(1314);//整型默认情况是intSystem.out.println(3.14);//浮点数默认情况是double}
}
正常输出结果:
在Java中整数默认情况下是int类型,浮点数默认情况下是double类型
例2
public class Blog {public static void main(String[] args) {int a = 10;long b = 10L;b = a;a = b;}
}
报错:
报错原因:
当b=a时,a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值。
当a=b时,编译报错,long的范围比int范围大,会有数据丢失,不安全。
例3
public class Blog {public static void main(String[] args) {float a = 3.14F;double b = 5.12;b=a;a=b;}
}
报错:
报错原因:
b=a,编译器会将f转换为double,然后进行赋值
a=b,double表示数据范围大,直接将float交给double会有数据丢失,不安全
通过上述三个例子,不难明白。当我们赋值错误时编译器会自动提示类型的不兼容。
7.2强制类型转换(显式)
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。举几个例子:
例1
public class Blog {public static void main(String[] args) {int a = 10;long b = 20L;b = a;a=(int)b;System.out.println(a);System.out.println(b);}
}
输出:
在自动类型转换中我们知道了,当long类型值赋值给int类型值时编译器会报错。因此为了达到目的,我们在long类型赋值给int类型前强制把long转换为int类型。
例2
public class Blog {public static void main(String[] args) {int a = 10;double b = 13.4;a =(int)b;System.out.println(a);System.out.println(b);}
}
输出:
当我们将double类型的值强转为int类型后,我们发现小数部分给舍弃了。这样是不行的,如果在银行工作,我们将一个小数部分给舍弃了是对客户很不友好的。这就是强制类型转换,编译器不会报错。
例3
public class Blog {public static void main(String[] args) {int a = 257;byte b = (byte)a;}
}
输出结果:
a的值为257超过byte范围,因此什么都没有输出。可见强制类型转换有时候是有些无用的。
注意事项:
1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
4. 强制类型转换不一定能成功,不相干的类型不能互相转换
7.3类型提升
C语言中也有隐式转换,它们分为整型提升与整型截断。什么意思呢,当字符型和短整型操作数在使用前被转换为普通类型(整型)这就叫整型提升,当普通类型转换为更低精度类型时候会进行整型截断。
Java当中不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。这点跟C语言有些许不一样。我们来看几个例子:
例1
public class Blog {public static void main(String[] args) {int a = 10;long b = 20;int c = a + b;long d = a + b;}
}
运行后出错:
出错点:
当int c = a+b时,因为long的类型要大于int类型,因此把long类型赋值给int类型是不合适的,会造成数据的丢失
当long d = a+b时,把long类型赋值给long类型,完全合理。
例2
public class Blog {public static void main(String[] args) {byte a = 10;byte b = 20;byte c = a+b;System.out.println(c);}
}
报错:
报错点:
byte 和 byte 都是相同类型,但是出现编译报错。原因是: 虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算, 得到的结果也是 int,这是赋给 c,就会出现上述错误。
我们应该这样写:
public class Blog {public static void main(String[] args) {byte a = 10;byte b = 20;byte c = (byte)(a+b);System.out.println(c);}
}
输出结果:
总结:
1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.
8.字符串类型
在Java中我们可以使用String类来定义字符串类型,比如:
public class Blog {public static void main(String[] args) {String str1="Hello";String str2="World";String str3="我是帅哥";System.out.println(str1);System.out.println(str2);System.out.println(str1+str2);System.out.println(str3);}
}
输出结果:
以上就是对字符串的一个定义,我们也可以用+号来实现两个字符串的拼接从而输出两个字符串拼接后的结果。
有些情况下,我们需要将字符串和整型数字之间进行转换:
1.int转成String
public class Blog {public static void main(String[] args) {int num = 18;//方法1String str1 = num+"是最美的年龄";//方法2String str2 = String.valueOf(num);System.out.println(str1);System.out.println(str2+"是最美的年龄");}
}
输出结果为:
我们可以看到,将int转成String的方法有直接用+号拼接和使用String.valueOf()方法。
2 .String转成int
public class Blog {public static void main(String[] args) {String str="1314";int num=Integer.parseInt(str);System.out.println(num);}
}
输出结果:
我们直接使用Integer.parseInt()方法来实现String转成int。
以上就是本篇博文的内容,感谢您的耐心观看。
Never Give Up
相关文章:

【JavaSE】数据类型与变量
JAVA之父:詹姆斯高斯林 (James Gosling) 前言: 大家好,我是程序猿爱打拳。今天我给大家讲解的是Java基础中的数据类型。主要讲解的是各个类型的应用场景以及注意事项。 目录 1.数据类型 2.常量与变量 2.1常量 2.2变…...

生成模型技术发展过程
生成模型生成模型和判别模型的差异生成模型的目标是在给定了数据集D,并且假设这个数据集的底层分布(underlying distribution)是Pdata,我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型,我们就能用这个生成模型为下游任务做…...

计算机网络第2章(物理层)学习笔记
❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...
4564: 保留尾部*
描述规定输入的字符串中只包含字母和*号,除了尾部的*号之外,请将字符串中其他*号全部删除。输入输入数据包括一串字符串,只包含字母和*,总长度不超过80。输出输出按要求删除*后的字符串。样例输入*******A*BC*DEF*G****样例输出AB…...

安卓项目搭建grpc环境
本篇文章使用的IDE是Android Studio。这里先吐槽一句,安卓项目搭建grpc环境,不管是引入插件还是引入第三方库,对于版本的要求都极为苛刻,一旦版本不匹配就会报错,所以对于版本的搭配一定要注意。 下面介绍的这个版本搭…...

Flink01: 基本介绍
一、什么是Flink 1. Flink是一个开源的分布式,高性能,高可用,准确的流处理框架 (1)分布式:表示flink程序可以运行在很多台机器上, (2)高性能:表示Flink处理性…...
设计模式之单例模式
文章の目录一、什么是单例模式二、如何实现单例模式1、利用JavaScript中的全局对象2、静态成员改造参考写在最后一、什么是单例模式 单例模式也称为单体模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点。 举个栗子:一个班级只有一…...

[oeasy]python0086_ASCII_出现背景_1963年_DEC_PDP系列主机_VT系列终端
编码进化 回忆上次内容 上次 回顾了 字符编码的新陈代谢 ibm 曾经的EBCDIC 由于 字符不连续导致 后续 出现无数问题 随着 网络的发展 数据交换的 需要原来的小隐患现在 产生了 巨大问题 Bemer 联合各方巨头 想要推出 字符连续的编码集 这新编码集 具体长什么样 呢࿱…...

基于FFmpeg实现的无声音屏幕录制
UI自动化测试时,有时需要进行录屏操作,这时我们是不需要声音的,我们可以通过FFmpeg进行简单的录制工作。 以下是在windows10环境下,基于FFmpeg实现的简单录制: Ffmpeg简介: 功能:有非常强大的…...

【项目精选】基于JSP物流信息网(论文+源码+视频)
点击下载源码 近年来,随着时代的进步,社会随之不断发展,经济也快速发展起来了,人民的消费水平在不断地提高,平常的实体店消费已经不能满足人们的需求;在者,互联网技术的不断发展也为电子商务的兴…...

linux异步IO编程实例分析
在Direct IO模式下,异步是非常有必要的(因为绕过了pagecache,直接和磁盘交互)。linux Native AIO正是基于这种场景设计的,具体的介绍见:KernelAsynchronousI/O (AIO)SupportforLinux。下面我们就来分析一下…...
日常英语口语练习-情景交际场景25(三)
登山踏青m: hey Carol, what are you doing this weekend?o: im going hiking /haikiŋ/登山with my husband and our hiking clubm: you have a hiking culb?o: yes, we do, we have 30 to 40 people of all ages and skill levelsm: thats great, do you gus do…...

Qt 工程师进阶技术23种设计模式
Qt 工程师进阶技术23种设计模式【1】23种设计模式【1】23种设计模式 设计模式是解决特定问题的一系列套路,这套方案提高代码可复用性、可读性、稳健性、可维护性及安全性。 23种设计模式可分为三类:结构型模式(侧重类与对象之间的组合)、行为型模式(侧重…...

Redis 强化
(Redis入门使用查看)https://blog.csdn.net/weixin_73849581/article/details/128390152?spm1001.2014.3001.5501缓存使用原则什么时候,什么样的数据能够保存在Redis中?1.数据量不能太大2.使用越频繁,Redis保存这个数据越值得3.保存在Redis中的数据一般不会是数据库中频繁修改…...
华为OD机试题 - 众数和中位数(JavaScript)
最近更新的博客 华为OD机试题 - 任务总执行时长(JavaScript) 华为OD机试题 - 开放日活动(JavaScript) 华为OD机试 - 最近的点 | 备考思路,刷题要点,答疑 【新解法】 华为OD机试题 - 最小步骤数(JavaScript) 华为OD机试题 - 任务混部(JavaScript) 华为OD机试题 - N 进…...

Go: expected pseudo-register found R13 error
报错描述: 启动Go项目时,报错: ../../../.go/pkg/mod/github.com/choleraehyq/pidv0.0.10/pid_go1.5_amd64.s:28: expected pseudo-register; found R13 原因分析: github.com/choleraehyq/pid这个依赖包的版本太低,需…...

程序员必备的技能-深入理解 Linux 内核拆解
841 页的《深入理解 Linux内核》堪称经典,时隔多年打开,泛黄的纸张上面仍然跳跃出一个个让人心潮澎湃的知识点,突然让我想起一位微信朋友的昵称:知识的舔狗!拆,开始~前言第一章 绪论Linux与其他类Unix内核…...

学习 Python 之 Pygame 开发坦克大战(三)
学习 Python 之 Pygame 开发坦克大战(三)坦克大战物体碰撞检测编写1. 实现敌方坦克与我方坦克间的碰撞2. 实现敌方坦克间的碰撞3. 实现玩家子弹与敌方坦克间的碰撞4. 实现敌方子弹与我方坦克间的碰撞 和 玩家复活5. 爆炸效果类6. 为子弹爆炸添加爆炸效果…...

Docker 学习笔记
概述 1. 什么是 Docker? Docker 是一个应用容器平台,管理项目中用到的所有环境(MySQL、Redis…) 2. Docker 和虚拟机的区别 虚拟机是携带操作系统的,本身很小的应用程序因为携带了操作系统而变得十分笨重࿰…...
华为OD机试 - 相同数字的积木游戏1(JS)
相同数字的积木游戏1 题目 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字, 积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处位置最远的2块积木块,计算他们的距离。 小薇请你帮忙替她解…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...