当前位置: 首页 > news >正文

Java数据类型与运算符

1. 变量和类型

变量指的是程序运行时可变的量,相当于开辟一块空间来保存一些数据。
类型则是对变量的种类进行了划分,不同类型的变量具有不同的特性。

1.1 整型变量(重点)

基本语法格式:

int 变量名 = 初始值;

代码示例:

int num = 10; //定义一个整型变量
System.out.println(num);

注意事项:

  • int 表示变量的类型是一个整型
  • Java中‘=’表示赋值,意思是给变量设置一个初始值。
  • 初始化操作是可选的,但是建议创建变量的时候都先初始化。
  • 每个语句写完后不要忘记封号,否则会编译失败。
  • ‘//’表示注释,注释作为代码的解释说明部分,不参与编译运行。
    在Java中,一个int变量占4个字节,和操作系统没有直接关系。
    什么是字节?
  • 字节是计算机表示空间大小的基本单位。
  • 计算机使用二进制表示数据,我们认为8个二进制位(bit)为一个字节(Byte)。
  • 我们平时的计算机为8GB内存,意思是8G个字节。
  • 其中1KB = 1024Byte, 1MB = 1024KB, 1GB = 1024MB.
  • 所以8GB相当于80多亿个字节。
    4个字节表示的数据范围是-231 -> 231-1 ,也就是-21亿到+21亿。
    使用以下代码可以查看Java中的整型数据范围:
System.out.println(Integer.MAX_VALUE);//int 的最大值
System.out.println(Integer.MIN_VALUE);//int 的最小值

如果运算的结果超出了int的最大范围,就会出现溢出的情况

int maxValue = Integer.MAX_VALUE;
System.out.println(maxValue+1);int minValue = Integer.MIN_VALUE;
System.out.println(minValue-1);

21亿这样的数字对于当前的大数据时代来说,是很容易超出的,针对这种情况,我们就需要使用更大范围的数据类型来表示。Java中提供了long类型。

1.2 长整型变量

基本语法格式:

long 变量名 = 初始值;

代码示例:

long num = 10L;//定义一个长整型变量,初始值写作10L(建议后面的L大写,防止和数字1混淆)
System.out.println(num);

注意事项:

  1. 基本语法格式和创建int 变量基本一致,只要把类型修改成long。
  2. 初始化设定的值为10L,表示一个长整型的数字。
    Java中long类型占8个字节,表示的数据范围-263 ->263-1
    使用以下代码查看Java中的长整型数据范围:
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE);

这个数据范围远超过int的表示范围,足够绝大部分的工程场景使用。

1.3 双精度浮点型变量(重点)

基本语法格式:

double 变量名 = 初始值;

代码示例:

double n = 1.0;
System.out.println(n);

神奇的代码1:

int a = 1;
int b = 2;
System.out.println(a / b);
//执行结果:0

在Java中,int 除以 int 的值仍然是int(会直接舍弃小数部分)。
如果想得到0.5,需要使用double类型计算。

double a = 1;
double b = 2;
System.out.println(a / b);
//执行结果:0.5

神奇的代码2:

double a = 1.1;
System.out.println(num * num);
//执行结果:1.2100000000000002

Java中的double虽然也是8个字节,但是浮点数的内存布局和整数差别很大,不能单纯的用2n 的形式表示数据范围。
Java的double类型的内存布局遵守IEEE 754标准(和C语言一样),尝试使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差。

1.4 单精度浮点型变量

基本格式:

float 变量名 = 初始值;

代码示例:

float num = 1.0f; //写作 1.0F 也可以
System.out.println(num);

float类型在Java中占4个字节,同样遵守IEEE 754标准,由于表示的数据精度范围较小,一般在工程上用到浮点数都优先考虑double,不太推荐使用float。

1.5字符类型变量

基本格式:

char 变量名 = 初始值;

代码示例:

char ch = 'A';

注意事项:

  1. Java中使用单引号+单个字符表示字面值。
  2. 计算机中的字符本质上是一个整数,在C语言中使用ASCII表示字符,而Java中使用Unicode表示字符,因此一个字符占用两个字节,表示的字符种类更多,包括中文。
    使用一个字符表示一个汉字:
char ch = '狸';
System.out.println(ch);

执行Javac的时候可能出现以下错误:

Test.java:3:错误:未结束的字符文字char ch = '鍛?';

此时我们在执行javac时加上-encoding UTF-8选项即可

java -encoding UTF-8 Test.java

1.6 字节类型变量

基本语法格式:

byte 变量名 = 初始值;

代码示例:

byte value = 0;
System.out.println(value);

注意事项:

  1. 字节类型表示的也是整数,只占一个字节,表示范围较小(-128 -> +127)。
  2. 字节类型和字符类型互不相干。

1.7 短整型变量

基本语法格式:

short 变量名 = 初始值;

代码示例:

short value = 0;
System.out.println(value);

注意事项:

  1. short占用2个字节,表示的数据范围是-32768 -> +32767。
  2. 这个表示范围较小,一本不推荐使用。

1.8 布尔类型变量

基本语法格式:

boolean 变量名 = 初始值;

代码示例:

boolean value = true;
System.out.println(value);

注意事项:

  1. boolean类型的变量只有两种取值,true表示真,false表示假。
  2. Java的boolean类型的变量和int 不能互相转换,不存在1表示true,0表示false这样的用法。
  3. boolean类型有些JVM的实现是占1个字节,有些是占1个比特位,这个没有明确规定。
boolean value = true;
System.out.println(value + 1);
/*编译会出现如下错误
java: 二元运算符 '+' 的操作数类型错误//第一个类型:  boolean第二个类型: int/*

1.9 字符串类型变量

把一些字符放到一起就构成了字符串。
基本语法格式:

String 变量名 = "初始值”;

代码示例:

String name = "ali";
System.out.println(name);

注意事项:

  1. Java使用双引号+若干字符的方式表示字符串字面值。
  2. 和上面的类型不同,String不是基本类型,而是引用类型
  3. 字符串中的一些特定的不太方便直接表示的字符需要进行转义。
    转义字符示例:
//创建一个字符串 My name is "阿狸"
String name = "my name is \"阿狸\"";

转义字符有很多,其中几个比较常见的如下:
在这里插入图片描述
字符串‘+’操作,表示字符串拼接:

System.out.println(num);
String a = "hello";
String b = "world";
String c = a + b;
System.out.println(c);
//执行结果:helloworld(这里没有空格,可以自己加)

还可以用字符串和整数进行拼接:

float num = 1.0f;
String str = "result =";
int a = 10;
int b = 20;
String result = str + a + b;
System.out.println(result);
//执行结果:result = 1020

以上代码说明,当一个‘+’表达式中存在字符串的时候,都是执行字符串的拼接行为。
因此我们可以很方便的使用System.out.println同时打印多个字符串或数字。

1.10 变量的作用域

也就是该变量能生效的范围,一般是变量定义所在的代码块(大括号)。

public static void main(String[] args) {int x = 10;System.out.println(x); //编译通过}System.out.println(x); //编译失败,找不到x

1.11 变量的命名规则

硬性指标:

1.一个变量名只能包含数字、字母、下划线。
2.数字不能开头。
3.变量名是大小写敏感的,即num和Num是两个不同的变量。
注意:虽然语法上也允许使用中文/美元符($)命名变量,但是强烈建议不推荐这样做。

软性指标:

1.变量命名要具有描述性,见名知意。
2.变量名不宜使用拼音(但是不绝对)。
3.变量名的词性推荐使用名词。
4.变量命名推荐小驼峰命名法,当一个变量名由多个单词构成的时候,除了第一个单词之外,其他单词首字母都大写。
小驼峰命名示例:

int maxValue = 100;
String studentName = "阿狸";

1.12 常量

上面讨论的都是各种规则的变量,每种类型的变量也对应着一种相同类型的常量。
常量在运行时类型不能发生改变。
常量主要有以下两种体现形式:

  1. 字面值常量
10int 字面值常量(十进制)
010int 字面值常量(八进制)由数字0开头,010即十进制的8
0x10int 字面值常量(十六进制)由数字0x开头,0x10即十进制的16
10Llong字面值常量,也可以写作10l(小写的L)
1.0double 字面值常量,也可以写作1.0d,或者1.0D
1.5e2double 字面值常量,科学计数法表示,相当于1.5 * 102
1.0ffloat 字面值常量,也可以写作1.0F
trueboolean 字面值常量,同样的还有false
’ a ’char 字面值常量,单引号中只能有一个字符
" abc "String 字面值常量,双引号中可以有多个字符
  1. final 关键字修饰的常量
final int a = 10;
a = 20;//编译出错,无法为最终变量a分配值

常量不能在程序运行过程中发生修改。

1.12 理解类型转换

Java作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有严格的校验。
先看以下几个代码场景:
int 和 long / double 相互赋值

int a = 10;
long b = 20;
a = b;//编译出错,可能会损失精度
b = a;//编译通过int a = 10;
double b = 1.0;
a = b;//编译出错,可能会损失精度
b = a;//编译通过

1.long 表示的范围更大,可以将 int 赋值给 long ,但是不能将 long 赋值给 int。
2.double 表示的范围更大,可以将 int 赋值给 double,但是不能将 double 赋值给 int 。

结论:

不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型,反之则不行。

int 和 boolean 相互赋值

int a = 10;
boolean b = true;
b = a;//编译出错,提示不兼容的类型
a = b;//编译出错,提示不兼容的类型

结论:

int 和 boolean 是毫不相干的两种类型,不能相互赋值。

int 字面值常量给 byte 赋值

byte a = 100;//编译通过
byte b = 256;//编译报错,从int 转换到byte 可能会有损失

注意:byte 表示的数据范围是-128 -> +127,256已经超过范围,而100还在范围之内。
结论:

使用字面值常量赋值的时候,Java会自动进行一些检查校验,判定赋值是否合理。

使用强制类型转换

int a = 0;
double b = 10.5;
a = (int)b;int a = 10;
boolean b = false;
b = (boolean)a;//编译出错,提示不能兼容的类型

结论:

使用(类型)的方式可以将double 类型强转成 int 。但是
1.强制类型转换可能会导致精度丢失。如刚才的例子中,赋值之后,10.5就变成10了,小数点后面的部分被忽略。
2.强制类型转换不一定能成功,互不相干的类型之间无法强转。

类型转换小结:

  • 不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型。
  • 如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能会精度丢失。
  • 将一个字面值常量进行赋值的时候,Java会自动针对数字范围进行检查。

1.13 理解数值提升

int 和 long 混合运算

int a = 10;
long b = 20;
int c = a + b;//编译出错,提示将long转成int会丢失精度
long d = a + b;//编译通过

结论:

当int 和 long 混合运算的时候,int 会提升成 long,得到的结果仍然是 long 类型,需要使用 long 类型的变量来接收结果。如果非要用 int 来接收结果,就需要强制类型转换。

byte 和 byte 的运算

byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
//编译报错 从int 转换到 byte 可能会有损失

结论:

1.byte 和byte 都是相同类型,但是出现编译报错,原因是,虽然 a 和 b 都是byte,但是计算 a + b 会先将 a 和 b 都提升成 int ,再进行计算,得到的结果也是 int ,将结果赋给 c ,就会出现上述错误。
2.由于计算机的CPU通常是按照4个字节为单位从内存中读写数据,为了硬件上实现方便,诸如byte和short这种低于4个字节的类型,会先提升成 int ,再参与计算。

正确的写法:

byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println(c);

类型提升小结:

  • 不同类型的数据混合运算,范围小的会提升成范围大的。
  • 对于short,byte这种比4个字节小的类型,会先提升成4个字节的 int ,再运算。

1.14 int 和 String 之间的相互转换

int 转成 String

int num = 10;
//方法一:
String str1 = num + "";
//方法二:
String str2 = String.valueOf(num);

String 转成 int

String str = "100";
int num = Integer.parseInt(str);

1.15 小结:

  • Java类型汇总,前面的内容重点介绍的是基本数据类型。
  • 每种数据类型及其范围,是需要我们掌握的重点。
  • 隐式类型转换和类型提升,是本节的难点,但是一般我们更推荐在代码中避免不同类型混用的情况,来规避类型转换和类型提升的问题。
    在这里插入图片描述

2. 运算符

基本四则运算符 + - * /

规则比较简单,值得注意的是除法:

  • int / int 结果还是 int ,需要使用double来计算
int a = 1;
int b = 2;
System.out.println(a / b);
//结果为0
  • 0不能作为除数
  • %表示取余,不仅可以对 int 求模,也能对double 来求模
System.out.println(11.5 % 2.0);
//运行结果 1.5

增量赋值运算符+= -= *= /= %=

int a = 10;
a += 1;//等价于a = a + 1
System.out.println(a);

自增 / 自减运算符++ - -

int a = 10;
int b = ++a;
System.out.println(b);
int c = a++;
System.out.println(c);

结论:

1.如果不取自增运算的表达式的返回值,则前置自增和后置自增没有区别。
2.如果取表达式的返回值,则前置自增的返回值是自增之后的值,后置自增的返回值是自增之前的值。

2.2 关系运算符

关系运算符主要有六个:==(等于) !=(不等于) < > <=(小于等于) >=(大于等于)

int a = 10;
int b = 20;
System.out.println(a == b);
System.out.println(a != b);
System.out.println(a > b);
System.out.println(a < b);
System.out.println(a >= b);
System.out.println(a <= b);

注意:
关系运算符的表达式返回值都是boolean 类型。

2.3 逻辑运算符(重点)

逻辑运算符主要有三个:&& || !

注意:
逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是boolean。
逻辑与
规则:两个操作数都为true,结果为true,否则结果为false。

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b && b < c);

逻辑或
规则:两个操作数都为false,结果为false,否则结果为true。

int a = 10;
int b = 20;
int c = 30;
System.out.println(a < b || b < c);

逻辑非
规则:操作数为true,结果为false;操作数为false,结果为true。(这是个单目运算符,只有一个操作数)。

int a = 10;
int b = 20;
System.out.println(!a < b);

短路求值
&&和 || 遵守短路求值的规则。

System.out.println(10 > 20 && 10 / 0 == 0);//打印false
System.out.println(10 > 20 || 10 / 0 == 0);//打印true

我们都知道,计算10 / 0会导致程序抛出异常,但是上面的代码却能正常运行,说明10 / 0并没有真正被求值。
结论:

1.对于&&,如果左侧表达式置为false,则表达式的整体一定是false,无需计算右侧表达式。
2.对于||,如果左侧表达式置为true,则表达式的整体一定是true,无需计算右侧表达式。

& 和 |(不推荐使用)
& 和 | 如果操作数为boolean的时候,也表示逻辑运算,但是和&& 以及 || 相比,它们不支持短路求值。

System.out.println(10 > 20 && 10 / 0 == 0);//程序抛出异常
System.out.println(10 > 20 || 10 / 0 == 0);//程序抛出异常

2.4 位运算符

Java 中对数据操作的最小单位不是字节,而是二进制位。

位运算符主要有4个 & | ~ ^

位操作表示按二进制位运算,计算机中都是使用二级制来表示数据的(0和1构成的序列),按位运算就是在按照二进制位的每一位依次进行计算。
按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0。
举个栗子:

int a = 10;
int b = 20;
System.out.println(a & b);

进行按位运算, 需要先把 10 和 20 转成二进制, 分别为 1010 和 10100。(我自己记的是:两1为1,有0为0)
在这里插入图片描述
按位或 | : 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1。

int a = 10;
int b = 20;
System.out.println(a | b);

运算方式和按位与相似。(我自己记的是:两0为0,有1为1)。
注意:
当 & 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算。
按位取反 ~ : 如果该位为 0 则转为 1, 如果该位为 1 则转为 0.

int a = 0xf;
System.out.printf("%x\n",~a);

注意:

  1. 0x 前缀数字为十六进制数字,十六进制可以看成是二进制的简化表达式,一个十六进制数字对应4个二进制位。
  2. 0xf 表示10进制的15,也就是二进制的1111.
  3. printf 能够格式化输出内容,%x表示按照十六进制输出。
  4. \n 表示换行符。

2.5 移位运算符(了解)

移位运算符有三个: << >> >>>
都是按照二进制位来运算

**左移 <<: **最左侧位不要了, 最右侧补 0.

int a = 0x10;
System.out.printf("%x\n",a << 1);

**右移 >>: **最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
无符号右移 >>>: 最右侧位不要了, 最左侧补 0
注意:

  1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
  2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.
  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
  4. 移动负数位或者移位位数过大都没有意义.

2.6 条件运算符

条件运算符只有一个: 表达式1 ? 表达式2 : 表达式3

当表达式1 的值为 true 时, 整个表达式的值为表达式2的值; 当表达式1的值为 false 时, 整个表达式的值为表达式3的值.
也就是:当表达式1的值为真时,执行表达式2,为假时执行表达式3.
也是 Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法.

//求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;

2.7 运算符的优先级

先看一段代码:

System.out.println(1 + 2 * 3);

结果为7,说明先计算了2*3,再计算+1
运算符之间是有优先级的,具体的规则我们不用刻意去记,在可能存在歧义的代码中加上括号即可。

2.8 小结:

  1. % 操作再 Java 中也能针对 double 来计算.
  2. 需要区分清楚 前置自增 和 后置自增之间的区别.
  3. 由于 Java 是强类型语言, 因此对于类型检查较严格, 因此像 && 之类的运算操作数必须是 boolean.
  4. 要区分清楚 & 和 | 什么时候是表示按位运算, 什么时候表示逻辑运算
    整体来看,Java的运算符的基本规则和C语言基本一致。

3. 注释

Java中的注释主要分为以下三种:

单行注释:// 注释内容(用的最多)
多行注释:/* 注释内容*/(不推荐)
文档注释: /** 文档注释 */(常见于方法和类之上描述方法和类的作用),可用来自动生成文档

3.2 注释规范

  1. 内容准确: 注释内容要和代码一致, 匹配, 并在代码修改时及时更新.
  2. 篇幅合理: 注释既不应该太精简, 也不应该长篇大论.
  3. 使用中文: 一般中国公司都要求使用中文写注释, 外企另当别论.
  4. 积极向上: 注释中不要包含负能量(例如 领导 SB 等).

4. 关键字

关键字是Java中一些具有特定含义的单词

用于定义访问权限修饰符的关键字private protected public
用于定义类,函数,变量修饰符的关键字abstract final static synchronized
用于定义类与类之间关系的关键字extends implements
用于定义建立实例及引用实例,判断实例的关键字new this super instanceof
用于异常处理的关键字try catch finally throw throws
用于包的关键字package import
用于修饰符关键字native strictfp transient volatile assert

定义的变量名不能和关键字冲突

相关文章:

Java数据类型与运算符

1. 变量和类型 变量指的是程序运行时可变的量&#xff0c;相当于开辟一块空间来保存一些数据。 类型则是对变量的种类进行了划分&#xff0c;不同类型的变量具有不同的特性。 1.1 整型变量&#xff08;重点&#xff09; 基本语法格式&#xff1a; int 变量名 初始值;代码示…...

网络虚拟化考题

vrrp讲过吗&#xff1f;&#xff1f;&#xff1f; d 每一层都是什么设备啊 abcd 为啥流量不可控不可视 c是啥意思 讲过吗 abc aNET网络虚拟化是啥啊 为啥&#xff1f;&#xff1f; 啥是CDN&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;...

《C++ Primer》导学系列:第 7 章 - 类

7.1 定义抽象数据类型 7.1.1 类的基本概念 在C中&#xff0c;类是用户定义的类型&#xff0c;提供了一种将数据和操作这些数据的函数&#xff08;成员函数&#xff09;组合在一起的方法。类定义了对象的属性和行为&#xff0c;通过实例化类来创建对象。 7.1.2 定义类 定义类…...

idea intellij 2023打开微服务项目部分module未在左侧项目目录展示(如何重新自动加载所有maven项目model)

项目场景&#xff1a; springcloud微服务项目,部分模块暂时不需要用到&#xff0c;就在pom.xml文件中注释掉相应的模块&#xff0c;突然有一天打开项目&#xff0c;部分项目module 在idea intellij工具左侧文件夹找不到了&#xff0c;重新file->open本地项目也还是部分模块…...

生成视频 zeroscope_v2_576w 学习笔记

目录 生成视频代码&#xff1a; 维度报错&#xff1a; 解决方法&#xff0c;修改代码&#xff1a; 已开源&#xff1a; 视频生成模型 Zeroscope开源 免费无水印 视频生成模型 Zeroscope_v2_576w 开源 - 腾讯云开发者社区-腾讯云 生成视频代码&#xff1a; import torch fro…...

H3C综合实验

实验拓扑 实验要求 1、按照图示配置IP地址 2、sw1和sw2之间的直连链路配置链路聚合 3、 公司内部业务网段为VLAN10和VLAN20; VLAN 10是市场部&#xff0c;vlan20是技术部&#xff0c;要求对VLAN进行命名以便识别&#xff1b;PC1属于vlan10&#xff0c;PC2属于vlan20&#xf…...

QThread 与QObject::moveToThread在UI中的应用

1. QThread的两种用法 第一种用法就是继承QThread&#xff0c;然后覆写 virtual void run()&#xff0c; 这种用法的缺点是不能利用信号槽机制。 第二种用法就是创建一个线程&#xff0c;创建一个对象&#xff0c;再将对象moveToThread, 这种可以充分利用信号槽机制&#xff…...

安卓逆向案例——X酷APP逆向分析

X酷APP逆向分析 这里介绍一下两种不同的挂载证书的方法。 chls.pro/ssl无法在浏览器中下载证书是什么原因解决方法&#xff1a; 法一 1. 挂载系统分区为读写 使用正确的挂载点来挂载系统分区为读写&#xff1a; su mount -o remount,rw /dev/uijISjR/.magisk/block/syste…...

创新案例|星巴克中国市场创新之路: 2025目标9000家店的挑战与策略

星巴克创始人霍华德舒尔茨&#xff1a;“为迎接中国市场的全面消费复苏&#xff0c;星巴克2025年推进9000家门店计划&#xff0c;将外卖、电商以及家享和外出场景咖啡业务纳入中国新一轮增长计划中。”在面临中国市场同店增长大幅下滑29%背景下&#xff0c;星巴克通过DTC用户体…...

计算机网络 MAC地址表管理

一、理论知识 1.MAC地址表&#xff1a;交换机使用MAC地址表来记录各MAC地址对应的端口&#xff0c;用于帧转发的目的。 2.老化机制&#xff1a;交换机会为每一条MAC地址表项设置老化时间&#xff0c;老化时间到期后未收到该MAC地址报文的表项将被删除&#xff0c;释放资源。 …...

【免费API推荐】:各类API资源免费获取【11】

欢迎来到各类API资源的免费获取世界&#xff01;幂简集成为您提供了一个集合了各种免费API接口的平台。无论您是开发者、数据分析师还是创业者&#xff0c;都可以通过我们的平台轻松免费获取所需的API资源。幂简精心整理了各类API接口&#xff0c;涵盖了不同领域的需求&#xf…...

技术驱动会展:展位导航系统的架构与实现

随着会展行业的快速发展&#xff0c;大型会展中心面临着如何提升参展者体验、提高招商效率的挑战。针对客户反馈的展馆面积大、展位查找困难等问题&#xff0c;维小帮提出一套智慧会展导航解决方案&#xff0c;旨在通过先进的室内导航技术提升会展中心的运营效率和参展者的满意…...

适用于轨道交通专用的板卡式网管型工业以太网交换机

是网管型 CompactPCI板卡式冗余环网交换机。前面板带有6个 10/100/1000Base-T(X)M12接口。后面的CPCI接口有 8个10/100/1000Base-T (X) 以太网接口。 是特别为轨道交通行业EN50155标准要求而设计的坚固型交换机。它同时具有以下特性&#xff1a; ● 支持2线以太网距离扩展端口&…...

excel基本操作

excel 若要取消在数据表中进行的所有筛选 步骤操作&#xff1a; 单击“数据”选项卡。在“排序和筛选”组中&#xff0c;找到“清除”按钮。点击“清除”按钮。 图例&#xff1a; 将文本文件的数据导入到Excel工作表中进行数据处理 步骤&#xff1a; 在Excel中&#xff0c…...

C++系统相关操作2 - 获取系统环境变量

1. 关键词2. sysutil.h3. sysutil.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 C 系统调用 环境变量 getenv 跨平台 2. sysutil.h #pragma once#include <cstdint> #include <string>namespace cutl {/*** brief Get an environment variable.** param na…...

适合小白学习的项目1906java Web智慧食堂管理系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目

一、源码特点 java Web智慧食堂管理系统是一套完善的信息管理系统&#xff0c;结合java 开发技术和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 bootstra…...

AI通用大模型不及垂直大模型?各有各的好

​​​​​​​AI时代&#xff0c;通用大模型和垂直大模型&#xff0c;两者孰优孰劣&#xff0c;一直众说纷纭。 通用大模型&#xff0c;聚焦基础层&#xff0c;如ChatGPT、百度文心一言&#xff0c;科大讯飞星火大模型等&#xff0c;都归属通用大模型&#xff0c;它们可以解答…...

农产品价格信息系统小程序

一键掌握市场脉动 &#x1f33e; 引言&#xff1a;为何关注农产品价格&#xff1f; 在当今社会&#xff0c;农产品价格的波动直接关系到农民的收入和消费者的生活成本。因此&#xff0c;及时、准确地掌握农产品价格信息&#xff0c;对于农民合理安排生产、消费者做出购买决策都…...

【LLM-多模态】高效多模态大型语言模型综述

一、结论写在前面 模型规模的庞大及训练和推理成本的高昂&#xff0c;限制了MLLMs在学术界和工业界的广泛应用。因此&#xff0c;研究高效轻量级的MLLMs具有巨大潜力&#xff0c;特别是在边缘计算场景中。 论文深入探讨了高效MLLM文献的领域&#xff0c;提供了一个全面的视角…...

ASP .Net Core创建一个httppost请求并添加证书

ASP .Net Core创建一个httppost请求并添加证书 创建.net Core程序&#xff0c;使用自签名证书&#xff0c;可以处理https的get和post请求。 创建证书 创建自签名证书的流程可以在这里查看&#xff1a; https://blog.csdn.net/GoodCooking/article/details/139815278创建完毕…...

Redis入门篇

目录 传送门一、前言二、NoSQL1、ont only sql&#xff0c;特点&#xff1a;2、NoSQL的四大分类&#xff1a; 三、Redis概念四、五大数据类型: 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringBoot3框架&#…...

变电站智能巡检机器人解决方案

我国拥有庞大的电网体系&#xff0c;变电站数量众多&#xff0c;且近年来快速增长。然而目前我国变电站巡检方式仍以人工为主&#xff0c;存在效率低下、监控不全面等问题。变电站通常是一个封闭的系统空间&#xff0c;设备种类繁多、占地面积广阔&#xff0c;这对巡检人员实时…...

Linux Kernel入门到精通系列讲解(QEMU-虚拟化篇) 2.5 Qemu实现RTC设备

1. 概述 上一章节起(5.4小节),我们已经把整个Naruto Pi都跑通了,从BL0到kernel再到Rootfs都通了,目前可以说已经具备学习Linux得基础条件,剩下得都只是添砖加瓦,本小节我们将添加RTC,如果你还没有添加RTC,你可以试试不添加RTC时,Linux的时间戳会很奇怪,加了RTC后,…...

【自动驾驶】通过下位机发送的加速度、角速度计算机器人在世界坐标系中的姿态

文章目录 原始代码全局变量定义逆平方根函数四元数解算函数理论解释四元数加速度计数据归一化计算方向余弦矩阵的第三行计算误差计算并应用积分反馈应用比例反馈积分陀螺仪数据,更新四元数归一化四元数更新姿态数据整体流程原始代码 #define SAMPLING_FREQ 20.0f // 采样频率…...

Python 设计模式(第2版) -- 第四部分(其他设计模式)

Python 设计模式(第2版) 最后介绍下其他设计模式。 模型—视图—控制器&#xff08;MVC&#xff09;-- 复合模式 根据 GoF 的定义&#xff0c;“复合模式将两个或更多模式组合成解决常见或普遍性问题的解决方案”。复合模式不是同时使用的一组模式&#xff0c;而是一个问题的…...

gitlab升级16.11.3-ee

背景 这是事后一段时间补充记录的博客。 升级目的&#xff1a;修补漏洞CVE-2024-4835 未经认证的威胁攻击者能够利用该漏洞在跨站脚本 (XSS) 攻击中&#xff0c;轻松接管受害者账户。 gitlab版本为14.6.2-ee升级至16.11.3-ee 思路 翻阅文档找升级方法及升级版本路径。使用…...

剑指offer 算法题(搜索二维矩阵)

剑指offer 第二题 去力扣里测试算法 思路一&#xff1a; 直接暴力遍历二维数组。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {for (unsigned int i{ 0 }; i < matrix.size(); i){for (unsigned int j{ 0 };…...

SaaS平台数据对接为什么要选择API对接?

SaaS平台数据对接是指将一个或多个SaaS平台中的数据集成到其他应用或平台中的过程。在当前的数字化时代&#xff0c;企业越来越倾向于使用SaaS平台来管理他们的业务和数据。然而&#xff0c;这些数据通常散布在不同的SaaS平台中&#xff0c;这对于企业数据的整合和分析来说可能…...

力扣136. 只出现一次的数字

Problem: 136. 只出现一次的数字 文章目录 题目描述思路复杂度Code 题目描述 思路 由于题目要求使用线性时间复杂度和常量级的空间复杂度&#xff0c;再加上找重复元素这个特性&#xff0c;我们可以想到使用位运算来求解&#xff1a; 1.任何数与其本身异或得0&#xff0c;任何…...

重学java 74.Lombok的使用

少点心气&#xff0c;多点干劲 —— 24.6.18 一、lombok的安装使用 1.作用: 简化javabean开发 2.使用: a.下插件 ->如果是idea2022不用下载了,自带 b.导lombok的jar包 安装教程&#xff1a; http://t.csdnimg.cn/wq9MM c.修改设置 二、lombok的介绍 Lombok通过增加一…...

数据结构6---树

一、定义 树(Tree)是n(n>0)个结点的有限集。当n0时成为空树,在任意一棵非空树中: 1、有且仅有一个特定的称为根(Root)的结点; 2、当n>1时,其余结点可分为m(m>日)个互不相交的有限集T1、T2、...、 Tm&#xff0c;其中每一个集合本身又是一棵树&#xff0c;并且称为根的…...

一键制作,打造高质量的数字刊物

随着数字化时代的到来&#xff0c;数字刊物已经成为信息传播的重要载体。它以便捷、环保、互动性强等特点&#xff0c;受到了越来越多人的青睐。然而&#xff0c;如何快速、高效地制作出高质量的数字刊物&#xff0c;成为许多创作者面临的难题。今天&#xff0c;教大家一个制作…...

Java面试题:对比继承Thread类和实现Runnable接口两种创建线程的方法,以及它们的优缺点

Java 中创建线程有两种主要的方法&#xff1a;继承 Thread 类和实现 Runnable 接口。下面我将分别介绍这两种方法&#xff0c;并对比它们的优缺点。 继承 Thread 类 方法&#xff1a; 创建一个继承自 Thread 的子类。重写 Thread 类的 run 方法。创建子类的实例并调用 start…...

编译原理-各章典型题型+思路求解

第2章文法和语言习题 基础知识&#xff1a; 思路&#xff1a; 基础知识&#xff1a; 思路&#xff1a; 基础知识&#xff1a; 编译原理之 短语&直接短语&句柄 定义与区分_编译原理短语,直接短语,句柄-CSDN博客 思路&#xff1a; 题目&#xff1a; 基础解释&#xff1a…...

【绝对有用】C++ vector排序

在 C 中&#xff0c;有多种方法可以对向量&#xff08;即 std::vector&#xff09;进行排序。最常用的方法是使用标准库中的 std::sort 函数。以下是一些例子&#xff1a; 使用 std::sort 函数 std::sort 函数是标准库 <algorithm> 中的一个函数&#xff0c;可以对向量…...

linux——VScode安装

方法一&#xff1a;使用snap一键安装 Snap Store 是 Ubuntu、Debian、Fedora 和其他几个 Linux 发行版中的一个应用商店&#xff0c;提供了数千个应用程序和工具的安装。Snap Store 使用 Snap 包格式&#xff0c;这是一种通用的 Linux 软件包格式&#xff0c;使得在不同的 Lin…...

X-LoRA:高效微调 LoRA 系列,实现不同领域知识专家混合模型

&#x1f4dc; 文献卡 X-LoRA: Mixture of Low-Rank Adapter Experts, a Flexible Framework for Large Language Models with Applications in Protein Mechanics and Molecular Design作者: Eric L. Buehler; Markus J. BuehlerDOI: 10.48550/arXiv.2402.07148摘要:We report…...

基于卷积神经网络的目标检测

卷积神经网络基础知识 1.什么是filter 通常一个6x6的灰度图像&#xff0c;构造一个3*3的矩阵&#xff0c;在卷积神经网络中称之为filter,对&#xff16;x6的图像进行卷积运算。 2.什么是padding 假设输出图像大小为nn与过滤器大小为ff&#xff0c;输出图像大小则为(n−f1)∗(…...

Mysqld数据库管理

一.Mysqld数据库类型 常用的数据类型 int 整型 无符号[0-4294967296&#xff08;2的32次方&#xff09;-1]&#xff0c;有符号[-2147483648&#xff08;2的31次方&#xff09;-2147483647]float单精度浮点 4字节32位double双精度浮点 8字节64位char固定长度的字符类型…...

Wifi通信协议:WEP,WPA,WPA2,WPA3,WPS

前言 无线安全性是保护互联网安全的重要因素。连接到安全性低的无线网络可能会带来安全风险&#xff0c;包括数据泄露、账号被盗以及恶意软件的安装。因此&#xff0c;利用合适的Wi-Fi安全措施是非常重要的&#xff0c;了解WEP、WPA、WPA2和WPA3等各种无线加密标准的区别也是至…...

开源【汇总】

开源【汇总】 前言版权推荐开源【汇总】最后 前言 先占个位 2024-6-21 21:29:33 以下内容源自《【创作模板】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net 禁止其他平台发…...

英文字母表

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 namespace 英文字母表 {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){foreach (var item in panel1.Controls){if (item ! null)…...

Redis缓存穿透

缓存穿透&#xff1a; 查询一个不存在的数据&#xff0c;mysql查询不到数据也不会直接写入缓存&#xff0c;就会导致每次请求都查数据库。 方法一&#xff1a; 方法二&#xff1a; 布隆过滤器&#xff1a; 简单来说就是一个二进制数组&#xff0c;用0和1来判断数组中是否存在…...

SHELL脚本学习(十一)正则表达式

一、锚点字符 1.1 锚点行首 脱字符(^)指出行首位置 $ cat < file1 test line1 test line2 test line3 line4 test#打印所有包括文本 test的行 $ sed -n /test/p file1 test line1 test line2 test line3 line4 test#打印所有以test为首的行 $ sed -n /^test/p file1 test…...

Leetcode Java学习记录——代码随想录哈希表篇

文章目录 哈希表几种哈希实现 Java数组HashSetmap方法charAt()toCharArray()for 遍历长度 哈希表 当需要快速判断一个元素是否出现在集合里的时候&#xff0c;就要用到哈希表。 无限循环就意味着重复出现。 几种哈希实现 数组&#xff1a;大小固定set&#xff1a;只存keymap…...

我又挖到宝了!小米、352、希喂宠物空气净化器除毛能力PK

养宠家庭常常因为猫咪们掉毛的问题烦恼。无论是短毛猫还是长毛猫&#xff0c;它们的毛发总是无处不在&#xff0c;从沙发到地毯&#xff0c;从床铺到衣物&#xff0c;甚至飘散在空气中。其中最难清理的就是飘浮在空气中的浮毛&#xff0c;最让人担心的是&#xff0c;空气中的浮…...

每月 GitHub 探索|10 款引领科技趋势的开源项目

1.IT-Tools 仓库名称&#xff1a; CorentinTh/it-tools 截止发稿星数: 16842 (近一个月新增:5744) 仓库语言: Vue 仓库开源协议&#xff1a; GNU General Public License v3.0 引言 CorentinTh/it-tools 是一个开源项目&#xff0c;提供各种对开发者友好的在线工具&#xff0…...

【如何让新增的Android.mk参与编译】

步骤1&#xff1a; 你需要在你新增的Android.mk目录以上的位置找一个已有的Android.mk 步骤2&#xff1a; 在原本已有的Android.mk中加入&#xff1a; //这是你新增的Android.mk文件的路径 include $(LOCAL_PATH)/xxx/xxx/Android.mk如果有些多可以这样写 //dir1 dir2是你新…...

【windows|009】计算机网络基础知识

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 ​ &#x1f3c5;阿里云ACE认证高级工程师 ​ &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社…...

C语言循环中获取之前变量的值

获取上个数组变量的值 #include <stdio.h> #include <string.h>enum { GG, DD }; int main() {int bi[] {0, 0};int bi_s1[] {0, 0};for (int i 0; i < 5; i) {memcpy(bi_s1, bi, sizeof(bi));bi[GG] i * 3;bi[DD] i * 2;printf("bigg %d, bigg_s1 …...