关于java中的字符与字符串(String、char、Character)

news/2024/7/12 3:27:54 标签: java, 数据类型, http, https, 数据库
java">public static void main(String[] args) {
    Integer a = new Integer(3);
    Integer b = 3;  // 将3自动装箱成Integer类型
    int c = 3;
    System.out.println(a == b); // false 两个引用没有引用同一对象
    System.out.println(a == c); // true a自动拆箱成int类型再和c比较
    System.out.println(b == c); // true
 
    Integer a1 = 128;
    Integer b1 = 128;
    System.out.println(a1 == b1); // false
 
    Integer a2 = 127;
    Integer b2 = 127;
    System.out.println(a2 == b2); // true
}

String 类的常用方法

方法名

参数列表

作用

length()

缺省

返回字符串长度

isEmpty()

缺省

是否为空

charAt()

(int index) 

返回指定索引处的字符

codePointAt()

(int index)

codePointBefore()

(int index)

codePointCount()

(int beginIndex, int endIndex)

offsetByCodePoints()

(int index, int codePointOffset)

getChars

(char dst[], int dstBegin)

按照下标返回字符串

(int srcBegin, int srcEnd, char dst[], int dstBegin)

getBytes()

(int srcBegin, int srcEnd, byte dst[], int dstBegin)

返回字符串的 byte 类型数组

(String charsetName)

(Charset charset)

缺省

equals

(Object anObject)

判断两个字符串是否相等(首先判断类型),字符串比较

contentEquals

(StringBuffer sb)

nonSyncContentEquals

(AbstractStringBuilder sb)

contentEquals

(CharSequence cs)

equalsIgnoreCase

(String anotherString)

compareTo

(String anotherString)

compareToIgnoreCase

(String str)

regionMatches

(int toffset, String other, int ooffset, int len)

(boolean ignoreCase, int toffset, String other, int ooffset, int len)

startsWith

(String prefix, int toffset)

(String prefix)

endsWith

(String suffix)

hashCode

缺省

indexOf

(int ch)

返回指定字符的索引

(int ch, int fromIndex)

(String str)

(char[] source, int sourceOffset, int sourceCount, String target, int fromIndex)

(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex)

indexOfSupplementary

(int ch, int fromIndex)

lastIndexOf

(int ch)

(int ch, int fromIndex)

(String str)

(String str, int fromIndex)

(char[] source, int sourceOffset, int sourceCount, String target, int fromIndex)

(char[] source, int sourceOffset, int sourceCount, char[] target, int targetOffset, int targetCount, int fromIndex)

lastIndexOfSupplementary

(int ch, int fromIndex)

substring

(int beginIndex)

截取字符串

(int beginIndex, int endIndex) 

subSequence

(int beginIndex, int endIndex)

concat

(String str)

replace

(char oldChar, char newChar)

字符串替换

matches

(String regex)

contains

(CharSequence s)

replaceFirst

(String regex, String replacement)

replaceAll

(String regex, String replacement)

replace

(CharSequence target, CharSequence replacement)

split()

(String regex, int limit)

分割字符串,返回一个分割后的字符串数组。

(String regex)

join

(CharSequence delimiter, CharSequence... elements)

(CharSequence delimiter,
        Iterable<? extends CharSequence> elements)

toLowerCase

(Locale locale)

将字符串转成小写字母

缺省

toUpperCase()

(Locale locale)

将字符串转成大写字符

缺省

trim()

去除字符串两端空白

toString()

toCharArray()

format

(String format, Object... args)

(Locale l, String format, Object... args)

valueOf

(Object obj)

(char data[])

(char data[], int offset, int count)

(boolean b)

(char c)

(int i)

(long l)

(float f)

(double d)

copyValueOf

(char data[], int offset, int count)

(char data[])

intern

缺省

java 中操作字符串的类以及它们之间的区别:

 在java中经常使用String类型,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图:

https://img-blog.csdn.net/20180411091757991?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTEwMTE3Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" />

例题:

java">String a = new String("hello" + "world");

问最终创建了几个对象?答案是3个。分别是hello、World、helloWorld

我们可以看到,初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间的,最终得到了“hello world”字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费。为了应对经常性的字符串相关的操作,谷歌引入了两个新的类——StringBuffer类(StringBuffer字符串变量)和StringBuild类(StringBuilder字符串变量)来对此种变化字符串进行处理。

例题1:第一次运行代码 String string = new String("abc");创建字符串abc,jvm中会产生几个对象?

2个,因为除了新建的那个对象,JVM会在常量区另外存储一个"abc"字符串,第二次使用的时候就会直接使用这个字符串。

三者的继承结构

https://img-blog.csdn.net/20180411092328691?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTEwMTE3Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" />

三者的区别:

StringStringBufferStringBuilder(Java5 )
名称不可变字符串可变字符串
效率特别低,占内存StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
线程安全不安全(不能同步访问)
描述String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
线程安全,多线程环境下推荐使用非线程安全,但 StringBuilder 的性能却高于 StringBuffer,单线程环境下推荐使用
适用场景如果要操作少量的数据用 String;当对大量字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
多线程操作字符串缓冲区下操作大量数据 StringBuffer;单线程操作字符串缓冲区下操作大量数据 StringBuilder。
初始化可以赋空值不可以赋空值不可以赋空值
常用方法concat():拼接字符串

reverse():反转,将字符串完全倒序

apend():追加字符串,即在后面增加字符串;

stringBuffer线程安全的原因:在stringBuffer的源码中,可以看到有很多synchronized修饰的方法,这样就保证了在使用stringBuffer的线程安全,而stringBuider中却没有synchronized关键字修饰,所以不能保证线程安全。

①String

java">String s = null;   
String s = “abc”;   

②StringBuffer

java">StringBuffer s = null; //结果警告:Null pointer access: The variable result can only be null at this location
StringBuffer s = new StringBuffer();//StringBuffer对象是一个空的对象
StringBuffer s = new StringBuffer(“abc”);//创建带有内容的StringBuffer对象,对象的内容就是字符串”

字符串反转

使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

示例代码:

java">// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // gfedcba

String str="abc"与 String str=new String(“abc”)不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。

两个语句都会先去字符串常量池中检查是否已经存在 “xyz”,如果有则直接使用,如果没有则会在常量池中创建 “xyz” 对象。

另外,String s = new String("xyz") 还会通过 new String() 在堆里创建一个内容与 "xyz" 相同的对象实例。

所以前者其实理解为被后者的所包含。

10、String s = new String("xyz") 创建了几个字符串对象?

一个或两个。如果字符串常量池已经有“xyz”,则是一个;否则,两个。

当字符创常量池没有 “xyz”,此时会创建如下两个对象:

一个是字符串字面量 "xyz" 所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,此时该实例也是在堆中,字符串常量池只放引用。

另一个是通过 new String() 创建并初始化的,内容与"xyz"相同的实例,也是在堆中。

2.HTML有哪些行内标签:

java语言找数组中的最小值:

SSM框架:

5.项目中怎么跟数据库做连接,用到了哪些数据库?sql优化有哪些方法?索引是什么?作用是什么?

6.Mybatis框架的作用是什么?

做过那些项目

项目用到了那些框架

说一下Spring

登录页面需要用到哪些框架


http://www.niftyadmin.cn/n/800871.html

相关文章

报错[已解决]:If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

报错[已解决]&#xff1a;If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.&#xff08;SpringBoot连接数据库&#xff09; Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), …

利用springboot连接数据库

利用springboot连接数据库&#xff1a; 整个过程可以分为两步&#xff1a; 第一步是将数据库的表格数据提取到后端&#xff0c;通过测试抓取数据&#xff0c;判断数据是否已经从数据库传递到后端。 第二步是将数据从后端通过接口传到前端&#xff0c;因为前后端接口不一致&a…

如何彻底解决mysql输入密码闪退问题?

如何彻底解决mysql输入密码闪退问题&#xff1f; 1.在MySQL的安装位置找到配置文件my.ini&#xff0c;然后用记事本将其打开&#xff0c;找到mysqld关键字后&#xff0c;在mysqld下面添加skip-grant-tables,保存退出。 PS&#xff1a;若提示不让保存时&#xff0c;可以将文件剪…

计算机硬件相关

在数据结构中&#xff0c;链表比数组更适于插入和删除操作&#xff0c;这句话对吗? 2021年&#xff0c;全球GPU霸主NVIDIA推出了一款基于Arm架构的数据中心CPU-- NVIDLA Grace,它是以谁的名字命名的?GraceHopper 2021年&#xff0c;马斯克的科学团队为一只九岁大的的猕猴大脑…

关于多粒度表达式

多粒度表达式 数据分析过程中有很多需求&#xff0c;比如要对数据进行多维度分析。 多粒度表达式。数据分析就是要对数据进行深入分析 一、概念介绍 1、什么是多粒度表达式&#xff1f; 多粒度表达式是一个表达式。表达式存在的目的就是用来计算&#xff0c;而计算可能会有…

[报错]Whitelabel Error Page

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Jun 08 16:22:51 CST 2021 There was an unexpected error (typeNot Found, status404). 出现这个白页一般是请求是可以发送的但是请求不到东西。不同…

搜索引擎服务器

solr底层使用的jetty jetty是一个开源的servlet容器&#xff0c;是基于java开发的web容器 tomCat服务器

随手记的一些知识点

CSS使一个div位于最上层&#xff08;改变层级&#xff09; Z-index属性决定了一个HTML元素的层叠级别。元素层叠级别是相对于元素在Z轴上即与页面&#xff08;X轴Y轴&#xff09;垂直方向。这个层叠顺序沿着z轴被呈&#xff0c;z-index值越高&#xff0c;这个元素在叠层顺序中…