问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

String/final/StringBuffer

发布网友 发布时间:2023-03-07 16:27

我来回答

1个回答

热心网友 时间:2023-04-29 01:47

final关键字(最终)

final修饰的类无法被继承.

final修饰的方法无法被覆盖.

final修饰的局部变量,一旦赋值,不可再改变.

1.字符串一旦创建不可再改变。"abc"字符串对象一旦创建,不可再改变成"abcd"

2.提升字符串的访问效率:在程序中使用了“缓存”技术。所以在java中所有使用“双引号”括起来

的字符串都会在“字符串常量池”中创建一份。字符串常量池在方法区中被存储。

3.在程序执行过程中,如果程序用到某个字符串,例如"abc",那么程序会在字符串常量池

中去搜索该字符串,如果没有找到则在字符串常量池中新建一个"abc"字符串,如果找到

就直接拿过来用。(字符串常量池是一个缓存区,为了提高访问字符串的效率)

//创建一个"abc"字符串对象,该对象的内存地址,让s1变量保存。

//s1是一个引用,s1指向 "abc" 对象.

String s1 = "abc";

//可以让s1重新指向吗?s1是局部变量,s1前边没有final,所以s1可以重新指向。

//但是"def"字符串本身不可变.

s1 = "def";

String s2 = "Hello"; //在字符串常量池中新建一个"Hello"字符串对象,该对象不可变

String s3 = "Hello"; //从字符串常量池中直接拿来用。

System.out.println(s2==s3); //true

//比较两个字符串是否相等,不能用"=="

String s4 = new String("abc");

String s5 = new String("abc");

System.out.println(s4==s5); //false

//比较两个字符串是否一致,必须使用String类提供的equals方法.

System.out.println(s4.equals(s5)); //true

//以下程序执行结束之后,会在字符串常量池中创建3个字符串对象

//"aaa" "bbb"  "aaabbb"

String s6 = "aaa";

String s7 = "bbb";

String s8 = s6 + s7;

字符串对象的区别

1.String s1 = "abc"; 只会在字符串常量池中创建一个"abc"字符串对象.

2.String s2 = new String("hello"); 会在字符串常量池中创建一个"hello"字符串对象,并且会在堆中再创建一个字符串对象。

第二种方式比较浪费内存,常用的是第一种方式。

面试题

//判断以下程序创建了几个对象? 3个

//堆中2个

//方法区字符串常量池中1个.

String s1 = new String("Hello");

String s2 = new String("Hello");

使用String的时候我们应该注意的问题:尽量不要做字符串频繁的拼接操作。

因为字符串一旦创建不可改变,只要频繁拼接,就会在字符串常量池中创建

大量的字符串对象,给垃圾回收带来问题。

String[] ins = {"sport","music","food","sleep"};

//要求将上面的兴趣爱好拼接成一个字符串“sport,music,food,sleep”

String temp = "";

for(int i=0;ins.length; I++){

if(i==ins.length-1){

temp += ins[i];

}else{

temp += ins[i] + ",";

}

}

System.out.println(temp);

字符串常用构造方法

//1. String s1 = "abc";

//2.String s2 = new String("abc");

//3.byte[] bytes = {97,98,99,100};

String s3 = new String(bytes);

System.out.println(s3); //abcd  String已经重写了Object中的toString

//4.String s4 = new String(bytes,1,2);

System.out.println(s4); //bc

//5.char[] c1 = {'我','是','中','国','人'};

String s5 = new String(c1);

System.out.println(s5); //我是中国人

//6.String s6 = new String(c1,2,2);

System.out.println(s6); //中国

字符串常用的方法

//1.char charAt(int index);返回指定索引处的char值

String s1 = "我是王勇,是坏人!";

char c1 = s1.charAt(2);System.out.println(c1); //王

//2.boolean endsWith(String endStr);此字符串是否以指定的后缀结束

System.out.println("HelloWorld.java".endsWith("java")); //true

System.out.println("HelloWorld.java".endsWith("txt")); //false

//3. boolean equalsIgnoreCase(String anotherString);将一个Str和另一个str比较,不考虑大小写

System.out.println("abc".equalsIgnoreCase("ABc")); //true

//4.byte[] getBytes();将字符串转换为byte数组

byte[] bytes = "abc".getBytes()

//5.int indexOf(String str);判断此字符串在另一个字符串第一次出现的索引

System.out.println("http://192.168.1.100:8080/oa/login.action?username=jack&pwd=123".indexOf("/oa"));//25

//6.int indexOf(String str, int fromIndex); 判断此字符串在另一个字符串第一次出现的索引,从指定索引开始,

System.out.println("javaoraclec++javavb".indexOf("java",1)); //13

isEmpty()当且仅当length()为0时返回true

//7.int lastIndexOf(String str)返回此字符串在此字符串中最右边出现的索引

System.out.println("javaoraclec++javavb".lastIndexOf("java")); //13

//8.int lastIndexOf(String str, int fromIndex)从指定的索引反向搜索

System.out.println("javaoraclec++javavb".lastIndexOf("java",14)); //13

//9.int length();

System.out.println("abc".length()); //数组是length属性,String是length()方法

//10. String replaceAll(String s1,String s2);替换,把java替换成mysql

System.out.println("javaoraclec++javavb".replaceAll("java","mysql")); //这个程序是4个字符串//mysqloraclec++mysqlvb

//11.String[] split(String s);

String myTime = "2008,08,08";

String[] ymd = myTime.split(",");以逗号分隔

for(int i=0;ymd.length;i ++){

System.out.println(imd[I]);

}

//12.boolean startsWith(String s);测试此字符串是否以指定的前缀开始

System.out.println("/system/login.action".startsWith("/")); //true

//13.String substring(int begin);截取字符串

System.out.println("/oa/login.action".substring(3)); //  /login.action

//14. String substring(int beginIndex, int endIndex)截取字符串

System.out.println("/oa/login.action".substring(4,9)); //login

//15.char[] toCharArray();将此字符串转换为一个新的字符串数组

char[] c2 = "我是李海波".toCharArray();

//16.转换成大写

System.out.println("Abcdef".toUpperCase());

//17.转换成小写

System.out.println("ABCDEf".toLowerCase());

//18.String trim(); 去掉前面空格和后面空格,但去不掉a后和e前的空格

System.out.print("      a  bcd e          ".trim());

//19.String valueOf(Object obj);返回新的字符串(类型转换)

Object o = null;

System.out.println(o); //不会,因为并不是直接调用toString方法,String.valueOf(Object)这个方法对空值进行处理了。

System.out.println(String.valueOf(o));

//System.out.println(o.toString()); //会出现空指针

java.lang.StringBuffer;

java.lang.StringBuilder;

1.StringBuffer和StringBuilder是什么?

是一个字符串缓冲区.

2.工作原理

预先在内存中申请一块空间,以容纳字符序列,

如果预留的空间不够用,则进行自动扩容,以

容纳更多字符序列。

3.StringBuffer,StringBuilder  和  String最大的区别?

String是不可变得字符序列,存储字符串常量池中。

StringBuffer底层是一个char数组,但是该char数组是可变的。

并且可以自动扩容。

char中是否可以存储一个中文汉字?

解:char底层存储的是unnicode编码格式的中文,

只要unnicode编码中有的中文汉字,就可以在char中声明

4.StringBuffer和StringBuilder的默认初始化容量是16

5.如何优化StringBuffer和StringBuilder呢?

最好在创建StringBuffer之前,预测StringBuffer的存储字符数量,

然后再创建StringBuffer的时候采用指定初始化容量的方式创建StringBuffer.

为了减少底层数组的拷贝。提高效率。

6.StringBuffer和StringBuilder的区别?

StringBuffer是线程安全的。(可以在多线程的环境下使用不会出现问题.)

StringBuilder是非线程安全的。(在多线程环境下使用可能出现问题.)

//创建字符串缓冲区对象

StringBuffer sb = new StringBuffer(); //16

//可以向StringBuffer中追加字符串.

String[] ins = {"体育","音乐","睡觉","美食"};

//推荐字符串频繁拼接使用StringBuffer或者StringBuilder

for(int i = 0; I<ins.length;i ++){

if(i==ins.length-1){

sb.append(ins[i]);

}else{

sb.append(ins[i]);

sb.append(",");

}

System.out.println(sb);

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
硅胶与液态硅胶手机壳的区别 什么样的过敏会传染 过敏的原理是什么?为什么有的人过敏,有的人不过敏?谢谢! 过敏为什么会痒 评审报告需要注意什么 财政评审流程及注意事项 高效项目评审的6大注意事项 银行双录 什么意思 什么是银行双录 在异地哪些可公证 使用命令行快还是使用stringbuffer快 人王肚中二粒沙,东门城上草开花,红线一家十一口,羊仔没尾归我家。&lt;打四个字&gt; 人王肚内贰粒沙,东门头上草开花,金龙连成十一口,八王请我到他家.----各打一字拜托各位大神 人王肚内一双瓜,东门城头草开花,教师旁边十一口,土上加田有一千,四个字 人王里面两堆沙,东门头上草生芽,丝线穿针十一口,我王头角叉叉? 人王肚中一双瓜,东门城头草开花,钩丝旁边十一口,八王与我共一家。猜四字,一句成语,其中两字是老字体 人王面前一对瓜,东门头上草生花,丝线吊再吉子口,八王以我共一家, 《东门草》 ( )听( )言,请补充完整。 一首现代诗!几首古诗(三首以上) 退换部首并组词 峎这个字怎么读,峎怎么念,峎怎么拼音,峎怎么组词 工程职称评审条件 载笑载言是什么意思 贞溪初夏的作品原文 有缘自会相见的繁体字 傅雷家书中第1章的名句是什么 如何评价悦严选的模式?如何看待? 有没有业内人士,能否说下惠下单做什么的? 羽绒服有水渍印痕怎么去掉 oppor9厚度是多少毫米? 王者荣耀中的百穿符文适用于什么英雄 不用电池的老式煤气灶原理图 CAD制图 (2008 07 11之前完成) 暴力追债属于什么罪行 什么行为是暴力催债 华为平板突然黑屏了,电量是满的。强制开机,振动后也不亮,按音量键有声音,连笔记本后笔记本上有显示 曹操王佐之才指的是谁 锐利造句子8个字 锐利造句简单一句话 编制人数是什么意思 核定编制人数什么意思 南诏国是什么民族天涯 胶带使用后蚂蚁庄园答案 留下黏黏的痕迹用哪种物品清理效果更好 立体种养技术具体采用的原理是 手相九大桃花纹看桃花运 手相看桃花运 手相怎么看桃花运旺不旺 女人的桃花运手相怎么看? 手指看桃花运 桃花指纹? 一生桃花不断的手相