Java开发基础系列(二):数据类型

news2024/9/28 1:11:37
😊 @ 作者: 一恍过去
💖 @ 主页: https://blog.csdn.net/zhuocailing3390
🎊 @ 社区: Java技术栈交流
🎉 @ 主题: Java开发基础系列(二):数据类型
⏱️ @ 创作时间: 2023年07月09日

目录

  • 1、八大数据基本类型
  • 2、八大数据包装类型
  • 3、数据的拆箱与装箱
  • 4、String字符串
    • 4.1 字符串截取
    • 4.2 字符串连接
    • 4.3 不可变性
    • 4.4 字符串常量池
    • 4.5 字符串比较
    • 4.6 字符串常用API
  • 5、 大数值类型
  • 6、数组对象
    • 6.1 数据创建即使用
    • 6.2 数据常用API

1、八大数据基本类型

基本数据类型

Java有八种基本数据类型:byte、short、int、long、float、double、boolean、char

其中有4中整型(byte、short、int、long),2种浮点型(float、double),1种字符类型(char),1种布尔类型(boolean)

表现符号

long(长整数)、float(单精度浮动数)、double(双精度浮动数)这三类数据类型在定义数据时,可以使用特定的后缀进行表示,比如:

1、直接定义整数表示int类型,如果要定义长整数,需要使用`L或者l`作为后缀
int i = 10; //不带任何符合默认为int类型
int er = 10L; //  错误的数据类型定义

long j = 10L;

==================================================================================

2、直接定义浮点数表示double类型,如果要定义float后缀double,需要使用`F或者f`与`D或者d`作为后缀
double k1 = 10D;
double k2 = 3.14159D;
double k3 = 3.14; //不带任何符合默认为double类型

float f = 10f;

float f2 = 10.10; // 错误的定义,没有后缀名默认为double类型
float f3 = 20.20D; // 错误的数据类型定义

类型对比表

基本类型名称标准符号包装类型内存占用取值范围
byte-Byte1-128 ~ 127
short短整数-Short2-32 768 ~ 32 767
int整数-Integer8-2 147 483 648 ~ 2 147 483 647
long长整数L或者lLong8-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
float单精度浮动数F或者fFloat41.4E-45~ 3.4028235E38
double双精度浮动数D或者dDouble84.9E-324~ 1.7976931348623157E308
boolean布尔类型-Boolean1true、false
char字符-Character1‘\u0000’~ ‘\uFFFF’

在这里插入图片描述

2、八大数据包装类型

数据包装类型

Java为八种基本数据类型提供了八种对应的包装类型:Byte、Short、Integer、Long、Float、Double、Boolean、Character

包装类型目的

Java中的八种基本数据类型不是面向对象的,包装类型相当于将基本类型包装起来,使其具有对象的性质,可以和对象一样使用属性和方法,丰富了基本类型的操作。

包装与基本类型的区别

  1. 类型不同: 包装类型属于对象,基本类型不是对象;
  2. 创建的不同: 基本类型可以直接进行赋值,而封装类型需new关键字;
    int a1 = 10;
    Integer a2 = new Integer(10);
    
  3. 初始值的不同: 基本类型在初始化时必须设置默认的值,包装类型在初始化时可以设置值为null;
    int a1 = 0;
    Integer a2 = null;
    
  4. 使用的不同: 在配合集合使用时,只能使用包装类型;
    List<Integer> list = new ArrayList<>();
    
    List<int> list2 = new ArrayList<>(); // 错误的定义
    
  5. API的不同: 包装类型属性对象,可以使用对象的属性和方法;
    // TODO 操作的API较多,下列进行简单的列举
    Integer.MAX_VALUEDouble.MAX_VALUELong.MAX_VALUE .... // 获取最大值
    Integer.MIN_VALUEDouble.MIN_VALUELong.MIN_VALUE.... // 获取最小值
    Integer.valueOf(String s)// 数据转换
    Integer.compare(int x, int y)// 数据比较
    
  6. 存储的不同: 基本类型的变量值保存在堆栈中, 包装类型通过引用指向实例,变量值保存在堆中。

3、数据的拆箱与装箱

数据的拆箱与装箱就是基本数据类型与包装数据类型之间的转换
拆箱: 就是把基本数据对应的包装类型转化为基本数据类型的动作就叫拆箱。
装箱: 就是基本数据类型,在编译器的处理下自动转化为包装类型的动作就叫做装箱。

拆箱的实现:

1、把包装数据类型的值作为参数传递给基本数据类型的接收方法;

public static void main(String[] args) {
   Integer a =10;// 基本数据类型
   test(a);
}
// 通过方法的传参的方式,包装类型转换为了基本类型
public static void test(int a){

}

===============================================

2、包装数据类型的值赋给对应的基本数据类型;

public static void main(String[] args) {
   Integer a1 = 10; //包装数据类型
   int a2 =a1;// 基本数据类型
}

装箱的实现:

1、把基本数据类型的值作为参数传递给包装数据类型的接收方法;

public static void main(String[] args) {
   int a =10;// 基本数据类型
   test(a);
}
// 通过方法的传参的方式,基本类型转换为了包装类型
public static void test(Integer a){

}

===============================================

2、基本数据类型的值赋给对应的包装数据类型;

public static void main(String[] args) {
   int a1 =10;// 基本数据类型
   Integer a2 = a1; //包装数据类型
}

在这里插入图片描述

4、String字符串

字符串(String)是一种基本的数据类型,用来存储和操作一系列字符的数据。Java中的字符串在java.lang包中定义,并且可以在没有导入任何额外的包的情况下使用。可以直接使用双引号完成字符串的定义,比如:

String str = "Hello, World!";

4.1 字符串截取

字符串截取,是操作字符串常用的方法,通过substring()方法,截取指定长度的字符串。
语法如下:

// beginIndex 开始截取的位置,索引值从0开始,即第一个字符的下标为0
// endIndex   结束截取的位置,但是不包含该位置的字符串
// endIndex - beginIndex = 截取后字符的长度
String substring(int beginIndex, int endIndex);

实例:

// 初始化字符串 str
String str = "hello world";

// 截取活动 `llo wor`
// 第一步(beginIndex 计算):计算出第一`l`字符的下标值为:2(下标从0开始算)
// 第二步(endIndex 计算):计算出最后一个`r`字符的下标值为:8(下标从0开始算,空格也算一个字符,)
// 第三步:使用截取方法,由于endIndex是指截取的位置(但是不包含在内),所以在计算结束位置的下标后,还需要`+1`
String newStr = str.substring(2, 9);// 9 = 8+1
System.out.println(newStr); // 输出结果:"llo wor"

4.2 字符串连接

1、Java中可以直接使用+运算符将两个字符串连接在一起,比如:

String a = "hello ";
String b = "world";
String c = a + b;
System.out.println(c); // 输出结果为"hello world"

2、字符串与其他类型的数据进行拼接时都会自动转换为字符串进行拼接,比如:

String a = "hello ";
int b = 123;
String c = a + b;
System.out.println(c); // 输出结果为"hello 123"

3、利用字符串拼接把数值强制转换为字符串,比如:

int a = 123;
String c = a + ""; // 数字前(后)加上空白字符串(""),就会转换为一个字符串
System.out.println(c); // 输出结果为"123"

4、需要注意是两个数值字符串相加得到的是连接后字符串,而不是相加后的具体数值,比如:

String a = "1";
String b = "1";
String c = a + b;
System.out.println(c); // 输出结果为"11",而不是"2"

4.3 不可变性

Java没有为String提供修改字符串的方法,所以Java中的字符串是不可变的。这意味着一旦创建了字符串,就不能更改它。需要注意的是:如果你尝试改变字符串,Java实际上会创建一个新的字符串。

// 定义字符串对象 str
String str = "hello";

// 将str修改为"hello World",此时虽然都使用的`str`这个对象,其实对象的地址值已经发生了变化,产生了一个新的对象
str = "hello World";

4.4 字符串常量池

为了提高性能和减少内存消耗,Java实现了一个称为字符串常量池的机制,相同的字符串值会共享使用同一个地址值。有两个相同的字符串字面值,它们实际上会指向内存中的同一个对象。

// 定义a对象
String a = "hello";

// 定义b对象
String b = "hello";

虽然分别定义了a、b两个对象,由于两个字符串的值都是"hello",所以对象的地址值是相同的;

4.5 字符串比较

通过s.equals(o)方法来比较两个字符串是否相等,比较结果返回true或者false,比较时可以使用字符串对象或者字符串面值,比如:

String a = "hello";
String b = "he";
// 进行比较
"hell".equals(a); // 结果:false
"hello".equals(a); // 结果:true
b.equals(a); // 结果:false
b.equals("he"); // 结果:true
"hell".equals("hello"); // 结果:false

可以通过equalsIgnoreCase,在比较时不区分大小写,比如:

String a = "Hello";
String b = "hEllO";
b.equalsIgnoreCase(a); // 结果:true

TIP:
在进行字符串对象间比较时,当对象可能会出现null值时,那么该对象最好写在equals()方法内,否则可能会出现“空指针异常”;

String a = null;
a.equals("hello"); // 会出现报错
"hello".equals(a); // 结果:false

在进行字符串比较时,最好使用equals而不是==;因为equals比较的是对象的数值,而==比较的是对象的地址值。虽然存在着字符串常量池,使得通常情况下字符串面值一样时地址值也一样。但是如果通过+或substring()方式得到的新的字符串,即使字符串面值一样,地址值也不一样,所以在通过==比较字符串面值时得到的结果就是false,会导致输出结果与预期结果不一致的情况;

String str = "hello";
String s1 = "he";
String s2 = "llo";
String s3 = s1 + s2; // 使用字符串拼接
String s4 = "hello123".substring(0, 5); // 使用字符串截取

s3==s4; // 结果:false
s3.equals(s4); // 结果:true
str==s4; // 结果:false
str==s3; // 结果:false
str.equals(s4); // 结果:true
str.equals(s3); // 结果:true

4.6 字符串常用API

Java中的String类提供了一系列的方法(API)用于处理和操作字符串,以下是一些常用的字符串方法:

1. length(): 返回字符串的长度

String str = "Hello";
int len = str.length();  // 长度为:5

2. charAt(int index): 返回字符串中指定索引处的字符。

String str = "Hello";
char ch = str.charAt(1);  // ch is 'e'

3. substring(int beginIndex) 和 substring(int beginIndex, int endIndex): 返回从指定索引开始的子字符串。如果提供了结束索引,那么返回的子字符串将不包含结束索引处的字符。

String str = "Hello";
String sub = str.substring(1);  // 结果: "ello"
String sub2 = str.substring(1, 3);  // 结果: "el"

4. indexOf(String s) 和 lastIndexOf(String s): 返回指定子字符串在此字符串中第一次出现处的索引,或者最后一次出现的索引。如果没有找到,则返回-1。

String str = "Hello";
int i = str.indexOf('l');  //  结果: 2
int j = str.lastIndexOf('l');  // 结果: 3

5. equals(Object anObject): 比较此字符串与指定的对象是否相等。

String str1 = "Hello";
String str2 = "Hello";
boolean eq = str1.equals(str2);  //  结果:true

6. equalsIgnoreCase(String anotherString): 忽略大小写,比较两个字符串是否相等。

String str1 = "Hello";
String str2 = "hello";
boolean eq = str1.equalsIgnoreCase(str2);  // 结果: true

7. startsWith(String prefix) 和 endsWith(String suffix): 检查字符串是否以指定的前缀开始或者后缀结束。

String str = "Hello";
boolean st = str.startsWith("He");  //  结果: true
boolean en = str.endsWith("lo");  //  结果: true

8. toLowerCase() 和 toUpperCase(): 返回字符串的小写或大写形式。

String str = "Hello";
String lower = str.toLowerCase();  // 结果: "hello"
String upper = str.toUpperCase();  // 结果: "HELLO"

9. trim(): 返回字符串的副本,忽略前导空白和尾部空白。

String str = " Hello ";
String trimmed = str.trim();  // 结果: "Hello"

10. replace(char oldChar, char newChar): 返回新的字符串,用新字符替换所有出现的旧字符。

String str = "Hello";
String replaced = str.replace('l', 'w');  // 结果: "Hewwo"

在这里插入图片描述

5、 大数值类型

对于精确度更高的计算,可以使用大数值类型,分为:BigInteger与BigDecimal
通过valueOf()方法可以将普通的数值转换为大数值,比如:

BigDecimal a = BigDecimal.valueOf(200.25);

BigInteger b = BigInteger.valueOf(100);

通过new对象的方式,进行大数值类型的初始化

BigInteger big1 = new BigInteger("100");

BigDecimal big2 = new BigDecimal("200.22");

大数值类型计算方式与普通的数值类型计算方式有所不同,具体计算公式如下:

BigInteger:

语法:

// 加法:
Biglnteger add(Biglnteger other)
// 减法
Biglnteger subtract(Biglnteger other)
// 乘法
Biglnteger multipiy(Biginteger other)
// 除法
Biglnteger divide(Biglnteger other)
// 如果这个大整数与另一个大整数 other 相等, 返回 0; 如果这个大整数小于另一个大整数 other, 返回负数;否则, 返回正数。
int compareTo(Biglnteger other)

实例:

// 初始化
BigInteger big1 = new BigInteger("200");
BigInteger big2 = new BigInteger("100");
// 计算        
BigInteger add = big1.add(big2); // 结果:300
BigInteger subtract = big1.subtract(big2); // 结果:100
BigInteger multiply = big1.multiply(big2); // 结果:20000
BigInteger divide = big1.divide(big2); // 结果:2
int i = big1.compareTo(big2); // 结果:1 ,因为:(big1>big2)

BigDecimal:

语法:

// 加法:
Biglnteger add(Biglnteger other)
// 减法
Biglnteger subtract(Biglnteger other)
// 乘法
Biglnteger multipiy(Biginteger other)
// 除法
Biglnteger divide(Biglnteger other)// 直接除,如果无限循环小数将报错
Biglnteger divide(Biglnteger other,RoundingMode roundingMode)// 对除后的结果,进行四舍五入到>整数位
Biglnteger divide(Biglnteger other,int scale, RoundingMode roundingMode)// 对除后的结果,保留指>定位数,再进行四舍五入
// 如果这个大整数与另一个大整数 other 相等, 返回 0; 如果这个大整数小于另一个大整数 other, 返回>负数;否则, 返回正数。
int compareTo(Biglnteger other)

实例:

BigDecimal big1 = new BigDecimal("200");
BigDecimal big2 = new BigDecimal("3");

BigDecimal add = big1.add(big2); // 结果:203
BigDecimal subtract = big1.subtract(big2); // 结果:197
BigDecimal multiply = big1.multiply(big2); // 结果:600
BigDecimal divide1 = big1.divide(big2, RoundingMode.HALF_UP); // 结果:67
BigDecimal divide2 = big1.divide(big2,3,RoundingMode.HALF_UP); // 结果:66.667
int i = big1.compareTo(big2); // 结果:1 (big1>big2)

6、数组对象

数组(Array)是一种用于存储相同类型数据的数据结构。它是一个固定长度的容器,可以在内存中连续存储多个元素,一单数组的长度确定了,就不能再进行修改。

6.1 数据创建即使用

声明数组: 声明一个数组时,需要指定数组类型和数组名称;完成声明后,实际的数组对象还没有被创建,比如声明numbers与names两个数组

int[] numbers; 

String[] names;

创建数组: 使用 new 关键字来创建一个数组对象,并且指定数组的长度,数组创建成功后数组中的每个元素都拥有一个默认值(默认值与数据类型有关),比如:

// 声明
int[] numbers; 
String[] names;

// 创建
numbers = new int[5]; 
names = new String[10];

// 创建时同时进行声明,常用
int[] numbers2 = new int[5];  // 默认值为:0
String[] names2 = new String[10]; // 默认值为:null

访问数组元素: 通过指定数组的下标索引值,就可以访问到指定的数组元素,数组的下标值从0开始,需要注意的是:由于数组下标从0开始,所以下标的最大值为数组长度减1,比如:

int[] numbers = new int[5];
numbers[0]; // 第一个元素
numbers[4]; // 第无个元素

初始化数组: 初始化分为静态初始化与动态初始化

  • 静态初始化:在声明和创建数组的同时为数组赋初值;
  • 动态初始化:在创建数组后,后续根据业务需求,再为指定的数组元素赋值;
// 静态初始化
int[] numbers = {1, 2, 3}; 

String[] names = {"a", "b", "c"};

// 动态初始化
int[] numbers2 = new int[5];
String[] names2 = new String[10];
numbers2[0] = 2; // 为数组中的第一个元素,赋值为:2
names2[1] = "hello"; // 为数组中的第二个元素,赋值为:"hello"

实例:

public class ArrayExample {
    public static void main(String[] args) {
        // 声明和创建数组
        int[] numbers = new int[5];

        // 静态初始化数组
        String[] names = {"John", "Alice", "Bob"};

        // 动态初始化数组
        numbers[0] = 10;
        numbers[1] = 20;
        numbers[2] = 30;

        // 访问数组元素
        int value = numbers[2];
        System.out.println("Value: " + value);

        // 修改数组元素值
        numbers[3] = 40;
   }
}

6.2 数据常用API

1. length:数组的属性,用于获取数组的长度。

int[] numbers = {1, 2, 3, 4, 5};
int length = numbers.length; // 获取数组的长度,结果为5

1. clone():用于创建数组的副本。

int[] numbers = {1, 2, 3, 4, 5};
int[] copy = numbers.clone(); // 创建数组的副本

3. toString():将数组转换为字符串表示。

int[] numbers = {1, 2, 3, 4, 5};
String str = Arrays.toString(numbers); // 结果:"[1, 2, 3, 4, 5]"

4. equals():用于比较两个数组是否相等。

// 需要数组中,各个下标位置的数值一样,得到的结果才是true
int[] numbers1 = {1, 2, 3, 4, 5};
int[] numbers2 = {1, 2, 3, 4, 5};
boolean isEqual = Arrays.equals(numbers1, numbers2); // 结果为:true

int[] numbers3 = {1, 2, 3, 4, 5};
int[] numbers4 = {1, 2, 3, 5, 4};
boolean isEqual2 = Arrays.equals(numbers3, numbers4); // 结果为:false

5. sort():对数组进行排序。

int[] numbers = {5, 3, 1, 4, 2};
Arrays.sort(numbers); // 对数组进行排序,结果为[1, 2, 3, 4, 5]

5. copyOf():对数组进行复制。
复制时,会三种情况:复制后数组变小、复制后数组不变、复制后数组变大

 int[] originalArray = {1, 2, 3, 4, 5};
// 复制原始数组的全部元素
int[] newArray1 = Arrays.copyOf(originalArray, 

// 复制原始数组的前3个元素
int[] newArray2 = Arrays.copyOf(originalArray, 3);

// 创建长度为7的新数组,如果超出原始数组长度部分填充默认值
int[] newArray3 = Arrays.copyOf(originalArray, 7);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生产消费者模型

生产消费者模型概念 生产消费者模型实际上就是通过一个容器&#xff0c;将生产者和消费者之间的强耦合问题解决掉。 没有使用生产者消费者模型时&#xff0c;生产者和消费者之间直接相互联通&#xff0c;两者之间强耦合&#xff0c;若是一方更换&#xff0c;那另一方也需要随之…

在 Jetpack Compose 中使用 ViewPager

简介 Jetpack Compose 是一个现代化的&#xff0c;声明式的 UI 工具包&#xff0c;让我们可以更方便地构建原生 Android UI。在本篇文章中&#xff0c;我们将会讨论如何在 Jetpack Compose 中使用 ViewPager。 什么是 ViewPager? ViewPager 是一个提供左右滑动切换视图的 U…

DynaSLAM代码详解(2) — Mask RCNN物体检测框架

目录 2.1 前言 2.2 Mask R-CNN优点 2.3 Mask R-CNN框架解析 (1) Mask R-CNN算法步骤 (2) Faster-R-CNN (3) FCN (4) ROIPooling和ROIAlign的分析与比较 (5) Mask R-CNN损失 参考链接&#xff1a; &#xff08;1&#xff09;Mask R-CNN网络详解_fcn太阳花的小绿豆_太…

Java开发专家阿里P6-P7面试题大全及答案汇总(持续更新)二十七、Ribbon和Feign的区别...

一、CPU100%问题如何快速定位 答案 1.执行top -c &#xff0c;显示进程运行信息列表 键入P (大写p)&#xff0c;进程按照CPU使用率排序 2.找到最耗CPU的线程 top -Hp 10765 &#xff0c;显示一个进程的线程运行信息列表 键入P (大写p)&#xff0c;线程按照CPU使用率排序 …

IDEA集成Maven

目录 配置Maven环境 创建Maven项目 Maven坐标 导入Maven项目 Maven依赖管理&#xff08;核心&#xff09; 配置Maven环境 两种方法 每没创建一个maven项目都需要在项目中配置一遍在所有设置中进行全局设置&#xff0c;适用于所有的maven项目 步骤 在idea的初始界面中找到所…

ASEMI整流桥2W10的结构特点和应用领域

编辑-Z 整流桥2W10是一种常用的电子元件&#xff0c;用于将交流电转换为直流电。本文将从工作原理、结构特点、应用领域和发展趋势四个方面对整流桥2W10进行详细阐述。 工作原理 整流桥2W10是由四个二极管组成的桥式整流电路。当输入的交流电信号通过整流桥时&#xff0c;根据…

文心大模型3.5完成内测

据报道&#xff0c;日前&#xff0c;百度文心大模型3.5版本已经完成内测应用&#xff0c;并在三大公开测试集上展现了出色的表现&#xff0c;其综合能力评测得分已经超过ChatGPT&#xff0c;部分中文能力甚至超越了GPT-4。 根据《中国科学报》的报道&#xff0c;3月份&#xf…

2023年全球零信任现状报告发布丨面临集成挑战,如何突破知易行难?

近日&#xff0c;专注网络与安全融合的全球网络安全领导者Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;宣布发布《2023年全球零信任现状报告》及其调查发现。该报告揭示了零信任安全当前部署和实施现状&#xff0c;以及 IT 团队在应对后疫情时代的混合办公模式的安…

还找不到好用的UI设计工具,来看这篇

即时设计是一个基于云的在线协作工具&#xff0c;专门为国产设计团队打造。与其它在线协作工具相比&#xff0c;即时设计具有更强的项目团队合作功能&#xff0c;也更容易实现上手操作。它可以帮助企业或团队从0到1的创建、测试和交付的设计项目。在即时设计的帮助下&#xff0…

更快地分割任何事物:面向移动应用的轻量级Sam

文章目录 摘要1、简介2、相关工作3、适合移动设备的SAM3.1、背景和项目目标3.2、提出方法 4、实验4.1、实验设置4.2、MobileSAM的性能与原版SAM相当4.3、MobileSAM优于FastSAM 5、结论 摘要 https://arxiv.org/pdf/2306.14289v2.pdf 分割任何事物模型(SAM)因其令人印象深刻的零…

健身器材BS EN ISO 20957标准

健身器材出口欧洲需要符合CE认证的 BS EN ISO 20957标准&#xff0c;而且 BS EN ISO 20957规定了固定训练设备的安全要求和试验方法&#xff0c;也就是固定训练设备在使用过程中的一般安全要求。这包括用于体育协会&#xff0c;教育机构&#xff0c;酒店&#xff0c;体育馆&…

Lazada官方运营服务商分享;店铺没流量?优化好标题是关键

一.商品标题简介 Q:商品标题是什么&#xff1f; A:商家上传商品时&#xff0c;填写的标题&#xff0c;会展示在PDP页面上端 Q:为什么商品标题很重要&#xff1f; A:商品标题可根据买家搜索的关键字来将商品呈现在搜索结果中&#xff0c;因此&#xff0c;需要在商品标题中尽…

欧科云链联合大湾区警方共话区块链安全

为了应对日益严峻的区块链衍生犯罪&#xff0c;日前欧科云链联合粤港澳大湾区警务人员在深圳开展了为期一天的三地警务研讨会&#xff0c;期间获得包括香港商报、澳门日报、澳门法治报、澳门商报、香港雅虎财经等多家港澳权威媒体的报道&#xff0c;引发三地警务机关的高度关注…

ceph故障解决

今天一早发现ceph集群出错&#xff0c;根据报错&#xff0c;可以判断出是时间不同步和一个存储池没有起来导致的 一、解决时间同步 1.1检查时间同步的ntp服务是否启动&#xff08;发现有两台服务器的ntp服务关闭了&#xff09; systemctl status ntp1.2 重启ntp服务(重启服…

超详细AI二维码制作教程:手把手教你如何用Stable Diffusion 生成一个创意二维码?

AI已来&#xff0c;未来已来! 来势汹汹的人工智能&#xff0c;如同创世纪的洪水&#xff0c;正在全世界的范围内引发一场史无前例的科技革命。AI正在改变世界&#xff01;而我们正是这场巨变的见证者。 今天我们要介绍的内容就是&#xff1a;如何利用AI工具Stable Diffusion&a…

python接口自动化(二十六)--批量执行用例 discover(详解)

简介  我们在写用例的时候&#xff0c;单个脚本的用例好执行&#xff0c;那么多个脚本的时候&#xff0c;如何批量执行呢&#xff1f;这时候就需要用到 unittest 里面的 discover 方法来加载用例了。加载用例后&#xff0c;用 unittest 里面的 TextTestRunner 这里类的 run 方…

【Docker】Docker的部署含服务和应用、多租环境、Linux内核的详细介绍

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

SSH 远程口令登录及免密登录

简介&#xff1a; SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机使用SSH协议登录另一台计算机我们就可以认为这种登录时安全的&#xff0c;即使被中途截获,密码也不会泄露 安装 1.服务器安装OpenSSH(CentOS系统默认安装了openssh) 1.yum install op…

如何利用Java实现 AI 人脸融合特效

Java实现AI人脸融合特效 项目背景AI 人脸融合特效的原理代码实现第一步&#xff1a;调用token接口人脸融合部分工具类最终效果图 项目背景 最近自从chat-gpt爆火以来&#xff0c;AI技术在人工智能领域持续迭代的创新&#xff0c;为人们的生活带来了许多震撼的应用。比如其中的…

C++刷题第六天 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

454. 四数相加 II 哈希表的经典题目 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < n nums1[i] nums2[j] nums3[k] nums4[l] 0 解题思路 这个…