2022-5-18_java

本文详细解析了Java中String与StringBuffer的区别,重点讲解了StringBuffer的构造、操作方法和适用场景,以及StringBuilder作为替代的选择。强调了在频繁修改字符串时,StringBuffer的效率优势和线程安全性。

2022-5-18_java

StringBuffer类

可变的字符序列, 可以对字符串内容增删.

直接父类是AbstractStringBuilder, 实现了Serializable

AbstractStringBuilder中有char数组而且不是final类型, 存字符串内容, 存放在堆中

StringBuffer是一个final类, 不能被继承

  1. String保存字符串常量, 里面的值不能更改, 每次String类更新实际上是改地址
  2. StringBuffer保存字符串变量, 可以改值, 效率较高.

StringBuffer的构造器

默认分配16个空间

StringBuffer()

放入一个字符串

也可以指定char[]的大小

String和StringBuffer相互转换

StringBuffer stringBuffer = new StringBuffer(str);str本身无影响

stringBuffer.append(str);先建空Buffer后添加也可以

StringBuffertoSting方法也可以

StringBuffer 常用的方法

  1. 增加 append
  2. 删除 delete(start, end)
  3. 改 replace(start, end, string) 被修改的不包含end
  4. 查 indexOf()
  5. 插入 insert(index) 原来index位置自动后移
  6. 获取长度 length

Exercise

分析需要看源码

StringBuilder结构分析

  1. 可变字符序列, 提供与StringBuffer兼容的API, 但不保证同步, 被设计为StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用时.
  2. StringBuilder上的主要操作是append和insert, 可重载.

在这里插入图片描述

结构图和StringBuffer几乎一致

StringBuilder常用方法

解读:

  1. 继承了AbstractStringBuilder类
  2. 实现了Serializable接口
  3. 是一个final类, 不能被继承
  4. 对象的字符序列, 还是存放在AbstractStringBuilder中的 char[] value中, 数据还是放在堆中的
  5. StringBuffer没有做互斥操作, 即没有synchronized关键字.

String, StringBuilder和StringBuffer的比较

  1. String不可变字符序列, 效率低, 但复用率高
  2. StringBuffer中有synchronized已同步
  3. StringBuilder 可变字符序列, 效率最高, 线程不安全
  4. String使用注意说明, 如果需要对String做大量修改, 不要使用String

结论

  1. 如果字符串存在大量的修改操作, 一般使用StringBuffer或StringBuilder
  2. 如果字符串存在大量的修改操作, 并存在多线程的情况, 使用StringBuffer
  3. 如果字符串存在大量的修改操作, 并存在多线程的情况, 使用StringBuffer
[root@localhost ~]# cd Downloads/ [root@localhost Downloads]# yum install java-1.8.0-openjdk-devel Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: ftp-stud.hs-esslingen.de * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package java-1.8.0-openjdk-devel.x86_64 1:1.8.0.412.b08-1.el7_9 will be installed --> Processing Dependency: java-1.8.0-openjdk(x86-64) = 1:1.8.0.412.b08-1.el7_9 for package: 1:java-1.8.0-openjdk-devel-1.8.0.412.b08-1.el7_9.x86_64 --> Running transaction check ---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.332.b09-1.el7_9 will be updated ---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.412.b08-1.el7_9 will be an update --> Processing Dependency: java-1.8.0-openjdk-headless(x86-64) = 1:1.8.0.412.b08-1.el7_9 for package: 1:java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 --> Running transaction check ---> Package java-1.8.0-openjdk-headless.x86_64 1:1.8.0.332.b09-1.el7_9 will be updated ---> Package java-1.8.0-openjdk-headless.x86_64 1:1.8.0.412.b08-1.el7_9 will be an update --> Processing Dependency: tzdata-java >= 2023d for package: 1:java-1.8.0-openjdk-headless-1.8.0.412.b08-1.el7_9.x86_64 --> Running transaction check ---> Package tzdata-java.noarch 0:2022a-1.el7 will be updated ---> Package tzdata-java.noarch 0:2024a-1.el7 will be an update --> Finished Dependency Resolution /var/cache/yum/x86_64/7/base/gen/comps.xml: no element found: line 1, column 0 Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: java-1.8.0-openjdk-devel x86_64 1:1.8.0.412.b08-1.el7_9 updates 9.9 M Updating for dependencies: java-1.8.0-openjdk x86_64 1:1.8.0.412.b08-1.el7_9 updates 325 k java-1.8.0-openjdk-headless x86_64 1:1.8.0.412.b08-1.el7_9 updates 33 M tzdata-java noarch 2024a-1.el7 updates 187 k Transaction Summary ================================================================================ Install 1 Package Upgrade ( 3 Dependent packages) Total download size: 44 M Is this ok [y/d/N]: y Downloading packages: No Presto metadata available for updates (1/4): java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64.rpm | 325 kB 00:00 (2/4): java-1.8.0-openjdk-devel-1.8.0.412.b08-1.el7_9.x86_ | 9.9 MB 00:21 (3/4): tzdata-java-2024a-1.el7.noarch.rpm | 187 kB 00:00 (4/4): java-1.8.0-openjdk-headless-1.8.0.412.b08-1.el7_9.x | 33 MB 01:12 -------------------------------------------------------------------------------- Total 608 kB/s | 44 MB 01:13 Running transaction check Running transaction test Transaction test succeeded Running transaction Updating : tzdata-java-2024a-1.el7.noarch 1/7 Updating : 1:java-1.8.0-openjdk-headless-1.8.0.412.b08-1.el7_9.x86_64 2/7 warning: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/security/java.policy created as /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/security/java.policy.rpmnew warning: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/security/java.security created as /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/security/java.security.rpmnew restored /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/security/java.policy.rpmnew to /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/security/java.policy restored /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/security/java.security.rpmnew to /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/security/java.security Updating : 1:java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 3/7 Installing : 1:java-1.8.0-openjdk-devel-1.8.0.412.b08-1.el7_9.x86_64 4/7 Cleanup : 1:java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64 5/7 Cleanup : 1:java-1.8.0-openjdk-headless-1.8.0.332.b09-1.el7_9.x86_64 6/7 Cleanup : tzdata-java-2022a-1.el7.noarch 7/7 Verifying : 1:java-1.8.0-openjdk-headless-1.8.0.412.b08-1.el7_9.x86_64 1/7 Verifying : tzdata-java-2024a-1.el7.noarch 2/7 Verifying : 1:java-1.8.0-openjdk-devel-1.8.0.412.b08-1.el7_9.x86_64 3/7 Verifying : 1:java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64 4/7 Verifying : tzdata-java-2022a-1.el7.noarch 5/7 Verifying : 1:java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64 6/7 Verifying : 1:java-1.8.0-openjdk-headless-1.8.0.332.b09-1.el7_9.x86_64 7/7 Installed: java-1.8.0-openjdk-devel.x86_64 1:1.8.0.412.b08-1.el7_9 Dependency Updated: java-1.8.0-openjdk.x86_64 1:1.8.0.412.b08-1.el7_9 java-1.8.0-openjdk-headless.x86_64 1:1.8.0.412.b08-1.el7_9 tzdata-java.noarch 0:2024a-1.el7 Complete! [root@localhost Downloads]# history 1 yum -y install gcc gcc-c++ openssl-devel 2 cd Downloads/ 3 wget https://nodejs.org/dist/v6.9.2/node-v6.9.2.tar.gz 4 ls 5 cd .. 6 ls 7 mkdir node 8 cd node 9 tar -xzf ~/Downloads/node-v6.9.2.tar.gz -C ./ 10 ls -l 11 cd .. 12 cd Downloads/ 13 cd node-v6.9.2.tar.gz 14 ls 15 cd node-v6.9.2.tar.gzcd .. 16 cd .. 17 cd node 18 ls 19 cd node-v6.9.2/ 20 ./configure 21 make -j$(nproc) 22 history 23 make install 24 node -v 25 npm -v 26 node --version 27 gcc --version 28 cd .. 29 mkdir -p /data/redis 30 cd /data/redis 31 wget https://download.redis.io/releases/redis-7.0.2.tar.gz 32 ls 33 tar -zxvf redis-7.0.2.tar.gz 34 ls -l 35 cd redis-7.0.2 36 make 37 sudo mkdir -p /etc/redis 38 sudo mkdir -p /var/lib/redis 39 ls -l 40 sudo cp redis.conf /etc/redis/ 41 cd .. 42 l -l 43 ls -l 44 cd .. 45 ls -l 46 cd .. 47 ls -l 48 cd etc/ 49 ls -l 50 cd redis 51 ls -l 52 vi redis.conf 53 redis-server /etc/redis/redis.conf 54 redis-server /redis.conf 55 cd .. 56 cd data 57 cd redis 58 sudo cp /data/redis/redis-7.0.2/src/redis-server /usr/bin/ 59 sudo cp /data/redis/redis-7.0.2/src/redis-cli /usr/bin/ 60 sudo cp /data/redis/redis-7.0.2/src/redis-benchmark /usr/bin/ 61 sudo cp /data/redis/redis-7.0.2/src/redis-check-aof /usr/bin/ 62 sudo cp /data/redis/redis-7.0.2/src/redis-check-rdb /usr/bin/ 63 sudo cp /data/redis/redis-7.0.2/src/redis-sentinel /usr/bin/ 64 cd /user/bin 65 cd .. 66 cd user 67 pwd 68 cd root 69 cd bin 70 ls 71 cd .. 72 ls 73 cd bin 74 ls -l 75 redis-server /etc/redis/redis.conf 76 cd .. 77 cd etc 78 ls -l 79 vi sysctl.conf 80 sysctl -p 81 cd .. 82 redis-server /etc/redis/redis.conf 83* redis-cil ping./ 84 cd bin 85* 86 ls l 87 ls -l 88 redis-server /etc/redis/redis.conf 89 cd .. 90 ls -l 91 cd root 92 cd Downloads/ 93 yum install java-1.8.0-openjdk-devel 94 history [root@localhost Downloads]# ls -l total 25904 -rw-r--r--. 1 root root 26522709 Dec 7 2016 node-v6.9.2.tar.gz [root@localhost Downloads]#
10-24
### Java 1.8开发环境安装 可以选择安装系统自带的 JDK 或者从 Oracle 下载 JDK 进行安装。 #### 安装系统自带的 JDK ```bash yum install java-1.8.0-openjdk* -y ``` 若之前安装过系统自带的 JDK 想要卸载,可按如下操作: ```bash # 查询系统安装的 java8 rpm -qa | grep java # (.noarch 可不删除) rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64 ``` #### 安装从 Oracle 下载的 JDK ```bash # 下载 wget https://download.oracle.com/otn-pub/java/jdk/8u311-b11/d7fc238d0cbf4b0dac67be84580cfb4b/jdk-8u311-linux-x64.tar.gz # 可能下载不了,建议直接去 oracle 下载后上传到 linux 上 # 解压 tar -zxvf jdk-8u311-linux-x64.tar.gz # 配置环境变量 vim /etc/profile # 进入后改成对应路径即可 export JAVA_HOME=/usr/local/java/jdk1.8.0_271 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin export PATH=$PATH:${JAVA_PATH} # 配置完使用,刷新环境变量 source /etc/profile # 查看是否安装好 java -version ``` **可能存在的问题及解决办法**: - 下载 Oracle JDK 时可能遇到网络问题无法下载,可手动从 Oracle 官网下载后上传到 Linux 系统。 - 配置环境变量时路径填写错误,需仔细检查 `JAVA_HOME` 等路径是否正确。 ### Node.js 安装 通常可以使用包管理器来安装 Node.js,以 `yum` 为例: ```bash # 添加 NodeSource 仓库 curl -sL https://rpm.nodesource.com/setup_14.x | bash - # 安装 Node.js 和 npm yum install -y nodejs # 验证安装 node -v npm -v ``` **可能存在的问题及解决办法**: - 网络问题导致无法添加 NodeSource 仓库,可检查网络连接或手动配置仓库源。 - 安装过程中可能遇到依赖问题,可尝试更新系统包管理器 `yum update` 后再安装。 ### Redis 安装 ```bash # 将下载好的安装包上传到 bigdata04 机器的 /data/soft 目录下 # 解压 tar -zxvf redis-5.0.9.tar.gz # 编译+安装 cd redis-5.0.9 make make install ``` 由于 Redis 需要依赖于 C 语言环境,如果 Centos 镜像是精简版,会缺失 C 语言的依赖,需要安装 C 语言环境才可以编译成功。 ```bash # 安装 C 语言环境 yum install -y gcc ``` ```bash # 修改 redis.conf 配置文件 vi redis.conf # 修改内容如下 daemonize yes logfile /data/soft/redis-5.0.9/log bind 127.0.0.1 192.168.61.103 ``` **可能存在的问题及解决办法**: - 编译时缺少 C 语言环境,安装 `gcc` 即可。 - 配置文件修改错误可能导致 Redis 无法正常启动,需仔细检查配置项。 ### 优化操作步骤 - 可以将安装脚本封装成一个自动化脚本,减少手动操作。 - 对于依赖安装,可在脚本开头先检查是否已安装,未安装则进行安装。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值