Java中的String用法

2023-11-18

新手Java程序员了解String类型

1、String是什么数据类型?

  String在定义上是java.lang包下的一个类,它不是基本的数据类型

  String是不可变的,JVM使用字符串池来存储所有的字符串对象

2、创建String对象的方式

    使用关键new

   这种方式JVM创建字符串对象但不存储于字符串池。可以调用intern()方法存储字符串池,如果字符串中已经有同样的字符串,则返回引用。

      使用双引号直接创建

这种方式JVM去字符串池中找有没有值相等的,如果有返回找到的字符串引用。如果没有创建新的字符串。

3、判断一个字符串是否是回文(顺读和倒读都一样)

     回文就是正反都一样的词,如果需要判断是否是回文,只需要比较正反是否相同即可。String类并没有提供反转方法供我们使用,但是StringBuffer和StringBuilder有reverse方法。

private static boolean isPalindrome(String str){
        if(str==null)
            return false;
      
 StringBuilder strBuilder=new StringBuilder(str);
        strBuilder.reverse();

        return strBuilder.toString().equals(str);
    }

不使用任何其他类来实现:

private static boolean string(String str){
        if(str==null)
            return false;
      
 int len=str.length();
        System.out.println(len/2);
        for(int i=0;i<len/2; i++){
            if(str.charAt(i)!=str.charAt(len-i-1)){
                return false;
            }
        }
        return true;
    }

4、如何让一个字符串变成大写或小写形式

     toUpperCase()大写

     toLowerCase()小写

5、字符串的比较

String内部实现了Comparable接口,有两个方法比较compare To(String anotherString)和compare TolgnoreCase(String str)。

   compare To(String anotherString)

与传入的anotherString进行比较,如果小于传入的字符串返回负数,如果大于则返回正数,当两个数相等时返回0,此时eqauls方法会返回true

    equalslgnoreCase(String str)

   该方法与compareTo方法类似,区别只是内部利用了Character.toUpperCase等方法进行了大小写转换后进行比较

6、String和char类型相互转换

这是一个误导题,String是一系列的字符,所以我们没办法转成单一的char,但可以调用toCharArray()方法将字符串转换成字符数组。

7、String 转换为byte array

使用String的getBytes()方法将String转成byte使用String的构造方法new String(byte[] array)将byte数据转为String

8、String,StringBuffer,StringBuilder区别

String是不可变类,对String类型的操作总会创建新的字符串。操作String很耗费资源,所以Java提供了两个工具来操作String  StringBuffer和StringBuilder

StringBuffer和StringBuilder是可变类,StringBuffer是线程安全,StringBuilder则是线程不安全。所以多线程对同一个字符串操作时选择StringBuffer.由于不需要处理多线程的情况,StringBuilder的效率比StringBufferh高

9、String是不可变有什么好处?

String不可变优点:

       由于String是不可变类,所以在多线程中使用时安全的,我们不需要做任何的替他同步操作

       String不可变,它的值也不能被改变,座椅用来存储数据密码安全

      String不可变可以在java运行时节省大量java堆空间,因为不同的字符串变量可以引用池中的相同的字符串,如果字符串是可变的,任何变量的值改变就会反射到其他变量,那么字符串池就没有任何意义

10、如何分割字符字符串

   split(String regex);传入正则字符串,返回字符串数组

   split(String regex,int limit);限制分割结果数组中有几个字符串。

11、判断两个String是否相等

有两种凡是判断字符串是否相等,使用“==”或者使用equals方法。当使用“==”操作符时,不仅比较字符串的值,还会比较引用的内存地址,大多数情况下我们只需要判断值是否相等,此时用equals方法比较即可。

12、字符串池

    存储字符串,存在于Java堆内存

13、String的intern()方法

当调用intern()方法被调用,如果字符串池中含有一个字符串和当前调用方法的字符串equals相等,那么就会返回池中的字符串,如果池中没有的话则首先先将当前字符串假如池中,然后返回引用

14、String是线程安全吗

String是不可变类,一旦创建String对象,我们就无法改变它的值,因此,它是线程安全的,可以安全地用于多线程环境中

15、为什么我们在使用HashMap的时候总是用String做key

因为字符串是不可变,当创建字符串时它的hashcose被缓存下来,不需要再次计算。因此HashMap内部实现是通过key的Hashcode来确定value的存储位置,所以相比其他对象更快,这也是我们平时都是用String作为HashMap对象。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中的String用法 的相关文章

  • tomcat应用服务器大量接口超时,内存及CPU飙升100%以上解决流程

    问题现象 最近我们相关站点的docker环境出现一个奇怪的现象 大量接口超时 普遍都是几千毫秒 问题解决 经过排查 已经确定不是被调用服务端的问题 于是开始排查我们自己的环境 发现docker容器的内存 从启动开始内存不断上升 然后找到我们
  • 【学习打卡】Pandas第六章:缺失数据

    Pandas学习 第六章 缺失数据 一 缺失观测及其类型 1 了解缺失信息 a isna和notna方法 判断缺失值 b 查看缺失值的所在行 c 挑出所有非缺失值列 2 三种缺失符号 二 缺失数据的运算与分组 1 加号与乘号规则 2 gro
  • 用Anaconda安装TensorFlow

    一说起现在比较火的机器学习 深度学习之类的 不得不说的一定有谷歌的TensorFlow框架 关于TensorFlow我就不多说了 因为我对这个东西也不太了解 这才是第一次开始学习 那么今天要说的是就是在Windows平台上安装TensorF
  • 利用MVC做一个 常见的管理系统

    登陆的部分 gt 数据库 gt 表 admin id name pass regtime 表与类的映射关系 基于面向对象 转换成对象的操作 gt 登陆页面
  • Java课题笔记~ JSP开发模型

    MVC 1 JSP演化历史 1 早期只有servlet 只能使用response输出标签数据 非常麻烦 2 后来有了jsp 简化了Servlet的开发 如果过度使用jsp 在jsp中即写大量的java代码 有写html表 造成难于维护 难于
  • 积分路径上有奇点的积分_复变函数与积分变换 简明笔记(七):留数定理

    拖更了两年 最近终于开始补齐之前这篇稿子的内容 之后可能会在暑假期间慢慢写好 保证质量比保证完成速度更重要 留数理论是复积分和复级数理论结合的产物 在前面详细讨论过洛朗级数和柯西积分定理之后 导出留数理论是很正常的事情 系统建立留数理论 实
  • yaffs2文件系统坏块发生记(读写代码及注释)

    yaffs2文件系统坏块产生记 对于yaffs2文件系统来说 坏块管理无疑是最关键的问题 下面就Yaffs2文件系统读 写操作来分析坏块产生记 写操作 写chunk操作 参数1 yaffs dev结构 全局 参数2 要写的2048字节数据
  • pyecharts的各个系列配置项设置示例——个人整理与分享

    由于在使用pyecharts时我们有很多对图表的配置项设置需要用到全局配置项和系列配置项 因此在对pyecharts的图表进行介绍之前先进行个人在pyecharts官网对系列配置项学习的整理 因为个人在官网对代码的查看没有特别舒服 其中包含
  • Nuxt3如何使用Tailwindcss?

    最近在Nuxt3项目中使用tailwindcss碰到一些问题 经研究后把问题解决 为避免此类问题特此把解决过程写下来做个记录 Nuxt3官网 tailwindcss官网 创建Nuxt3应用 须确保node js版本大于16 11 Nuxt3
  • 搜索技巧

    搜索技巧 一 完全匹配搜索 里面的就是完全搜索 例如 胡文迪 就会找完全匹配胡文迪三个字的相关结果 如果没有检索到 二 搜索范围限定在标题 intitle xx allintitle xx xx 在查询词前加上intitle xx 如果是多
  • 步进电机 - 构造与动作原理(二)

    第2章 构造与动作原理 2 1 构造 1 基本构造与动作原理 通过简易的示图讲解步进电动机的基本构造和动作原理 基本构造和动作原理 下图为步进电动机简易示图 对线圈L1进行通电时 L1会被磁化 中间部分的磁铁被LI吸引 并于平衡后停止 对线
  • 解决IntelliJ IDEA 项目结构旁边出现 0%classes,0% lines covered

    解决IntelliJ IDEA 项目结构旁边出现 0 classes 0 lines covered 官方文档解答 两种方法 解决IntelliJ IDEA 项目结构旁边出现 0 class 0 lines covered 官方文档解答 F
  • vector 查找/查找和对比结构体元素值

    原地转 http www cplusplus com reference algorithm find if include
  • SP706_MCU监控芯片

    SP706 MCU监控芯片 说明 SP706R S T系列是微处理器 P 监控电路系列 集成了离散解决方案的无数组件 监控 P和数字系统中的电源和电池 SP706R S T系列的功能包括看门狗定时器 P复置 电源故障比较器和手动重置输入 S
  • ELK 性能优化实践

    点击上方蓝色 方志朋 选择 设为星标 回复 666 获取独家整理的学习资料 一 背景介绍 近一年内对公司的 ELK 日志系统做过性能优化 也对 SkyWalking 使用的 ES 存储进行过性能优化 在此做一些总结 本篇主要是讲 ES 在
  • 小程序录音及其动画

    基础功能可以这样写 挺简单的 const recorderManager wx getRecorderManager const innerAudioContext wx createInnerAudioContext Page data
  • 拓世科技集团

    2023年 中国改革开放迎来了45周年 改革春风浩荡 席卷神州大地 45年间 中国特色社会主义伟大事业大步迈入崭新境界 一路上结出了饶为丰硕的果实 中华民族在这45年间的砥砺前行 不仅使中国的经济和社会发展达到了举世瞩目的成就 也在国家民主
  • 通过 ffmpeg 无损剪切/拼接视频

    剪切 拼接视频文件是一种常见需求 在线视频网站现在往往将一个视频文件分割成 n 段 以减少流量消耗 使用 DownloadHelper DownThemAll 这类工具下载下来的往往就是分割后的文件 能实现剪切 拼接视频文件的工具多种多样
  • java.lang.NumberFormatException: null的解决方法

    1 首先附上我的代码 Integer reviewid Integer valueOf request getParameter reviewid System out println reviewid Integer articleid
  • 避免’sudo echo x >’(sudo 重定向) 时’Permission denied’

    避免 sudo echo x gt 时 Permission denied 甲 示例 sudo echo a gt 1 txt bash 1 txt Permission denied 乙 分析 bash 拒绝这么做 说是权限不够 这是因为

随机推荐

  • 【Linux之Shell脚本实战】Linux创建新用户脚本

    Linux之Shell脚本实战 Linux创建新用户脚本 一 脚本要求 二 本地环境介绍 三 配置脚本注释模板 1 编辑 vimrc 文件 2 检查模板生效情况 四 编辑useradd sh 1 新建脚本目录 2 编辑useradd sh脚
  • hibernate注解自动生成数据表

    按习惯来说 一般系统开发都是从数据库开始设计的 但从面向对象开发的角度 系统的设计应该基于对象模型的设计之上 主要考虑对象的设计和逻辑 然后按照对象模型生成数据库结构 利用hibernate的SchemaExport对象可以方便的实现这一点
  • Python数据分析与应用目录

    Python数据分析与应用目录 第1章 Python数据分析概况 1 1 认识数据分析 1 2 熟悉Python数据分析的工具 1 3 Jupyter Notebook 快捷键 第2章 NumPy数值计算基础 2 1 掌握NumPy数组对象
  • 云服务中执行wget,报403

    问题复现 云服务器中配置完nginx后 通过wget测试 报403 解决方法 根目录执行如下命令 chmod R 777 root chmod R 777 root test server chmod R 777 root test ser
  • 在react项目中,使用craco插件进行mobx配置解决方案

    在使用react项目中 不可避免的要使用蚂蚁金服出品的ant desgin前端UI组件 ant desgin推荐使用 craco 一个对 create react app 进行自定义配置的社区解决方案 对 create react app
  • 一台服务器如何部署多个tomcat和项目(最详细的图文教程!!!)

    前言 提示 部署多个项目的方法有很多种 本文记载的是在Windows下 安装多个tomcat通过修改端口来部署项目 Linux部署方式大同小异 第一步 解压tomcat安装包后 复制一份并且重命名 多个tomcat就多复制一份 没有tomc
  • 【测试开花】五、项目管理-前端-实现查询、新增功能

    基于 springboot vue 的测试平台开发继续更新 一 查询功能 在之前的项目列表接口里 支持使用项目名称模糊查询 现在来实现前端 1 input 输入框 到组件库里找个输入框 复制代码 修改代码 v model 绑定了下面 dat
  • 服务器架构的演进

    服务器端的架构随着公司以及业务的发展 它不断演进 其演进的过程如下 https www cnblogs com joelan0927 p 10425530 html https blog csdn net daogla article de
  • 【数电】如何通俗地理解锁存器和触发器

    目录 一 相关知识 1 三极管和MOS管 2 TTL电路和CMOS电路 3 门电路 4 双稳态电路 二 锁存器 触发器 1 锁存器 2 触发器 1 电平触发的SR触发器 2 电平触发的D触发器 3 边沿触发的D触发器 4 脉冲触发的SR触发
  • java环境搭建图解_Windows7下的Java运行环境搭建过程图解

    单击 Java Download 按钮 选中 Accept License Agreement 单选按钮 我们以Windows 64位操作系统为例 下载Windows X64版的jdk 单击 jdk 8u5 windows x64 exe
  • vue-video-player 一款vue的前端视频播放插件 支持m3u8

    项目进行时 对视频模块需要进行组件开发 结合当前使用的开发框架是vuecli 于是寻找到vue video player 根据github上的文档进行开发 发现并不能实现播放功能 于是在网站上进行寻找发现 vue video player依
  • 3.爬虫之Scrapy框架的安装与使用

    1 Scrapy框架 1 1 介绍 Scrapy是一个开源和协作框架 可以用于数据挖掘 监测 自动化测试 获取API所有返回的数据或网络爬虫 Scrapy是基于twisted框架开发的 twisted是一个流行的事件驱动的python网络框
  • 不用导入animate库,也能实现animate的动画

    1 基础公共代码 animated animation duration 8s 持续时间 animation fill mode both 2 在animate官网 Animate css A cross browser library o
  • Django快速开发(精简版)

    1 使用虚拟环境 workon 虚拟环境名 2 退出虚拟环境 deactivate dajngo框架开发的大体流程 1 创建环境 mkvirtualenv 虚拟环境名 删除 rmvirtualenv 虚拟环境名 virtualenv p u
  • SMTP发送邮件

    SMTP是发送邮件的协议 Python内置对SMTP的支持 可以发送纯文本邮件 HTML邮件以及带附件的邮件 Python对SMTP支持有smtplib和email两个模块 email负责构造邮件 smtplib负责发送邮件 首先 我们来构
  • vue +C# mvc 坑

    1 把input标签放入到form表单中后 再将input中的值新增到数据库后 界面会刷新 解决 删除form 标签 原因待查
  • win11 安装opencv-python

    首先下载python3 7以上版本 installer版本 选择安装pip 添加环境 cmd 打开终端 pip install i https pypi tuna tsinghua edu cn simple opencv python p
  • List集合给另一个List集合赋值问题(即浅拷贝与深拷贝)

    问题 java中将一个list的内容复制给另一个list之后 去新的list进行操作的时候 原来的list也会发生变化 解决方案 直接采用 进行的复制属于浅层赋值 两者指向的使用一个地址 所以操作一个时另一个也会发生变化 如果不想出现这样的
  • 搜索插入位置 JavaScript

    在有序数组中查找 无则插入 元素 返回索引 题目详情 https leetcode cn com problems search insert position description 遍历数组查找 插入 查找比较简单 插入时会麻烦一些 如
  • Java中的String用法

    新手Java程序员了解String类型 1 String是什么数据类型 String在定义上是java lang包下的一个类 它不是基本的数据类型 String是不可变的 JVM使用字符串池来存储所有的字符串对象 2 创建String对象的