String和StringBuffer
【java】String类和StringBuffer类常用操作
【java】String类和StringBuffer类常⽤操作String类是字符串常量,是不可更改的常量。
⽽StringBuffer是字符串变量,它的对象是可以扩充和修改的。
StringBuffer在进⾏字符串处理时,不⽣成新的对象,在内存使⽤上要优于String类。
所以在实际使⽤时,如果经常需要对⼀个字符串进⾏修改,例如插⼊、删除等操作,使⽤StringBuffer要更加适合⼀些。
String类主要⽅法的使⽤⼀、创建并初始化字符串:String s = "hello!"; //使⽤字符串常量直接初始化String(); //使⽤构造⽅法创建并初始化,初始化⼀个对象,表⽰空字符序列String(value); //利⽤已存在的字符串常量创建⼀个新的对象String (char[] value); //利⽤⼀个字符数组创建⼀个字符串String(char[] value,int offset,int count);//截取字符数组offset到count的字符创建⼀个⾮空串String(StringBuffer buffer); //利⽤StringBuffer对象初始化String对象⼆、String类主要⽅法的使⽤:1、获取长度*.length(); //这与数组中的获取长度不同,*.length;2、⽐较字符串(1)equals() //判断内容是否相同(2)compareTo() //判断字符串的⼤⼩关系(3)compareToIgnoreCase(String int) //在⽐较时忽略字母⼤⼩写(4)== //判断内容与地址是否相同(5)equalsIgnoreCase() //忽略⼤⼩写的情况下判断内容是否相同//如果想对字符串中的部分内容是否相同进⾏⽐较,可以⽤(6)reagionMatches() //有两种 public boolean regionMatches(int toffset, String other,int ooffset,int len);表⽰如果String对象的⼀个⼦字符串与参数other的⼀个⼦字符串是相同的字符序列,则为true.要⽐较的String 对象的字符串从索引toffset开始,oth public boolean reagionMatches(boolean ignoreCase,int toffset,String other,int ooffset,int len);//⽤布尔类型的参数指明两个字符串的⽐较是否对⼤⼩写敏感。
JAVAAPI(一)String类和StringBuffer类
⽅法声明 功能描述int indexOf(int ch)返回指定字符在此字符串中第⼀次出现处的索引int lastIndexOf(int ch)返回指定字符在此字符串中最后⼀次出现处的索引int indexOf(String str)返回指定⼦字符串在此字符串中第⼀次出现处的索引int lastIndexOf(String str)返回指定⼦字符串在此字符串中最后⼀次出现处的索引char charAt(int index)返回字符串中index 位置上的字符,其中,index 的取值范围是0-(字符串长度-1)boolean endsWith(String suffix)判断此字符串是否以指定的字符串结尾int length()返回此字符串的长度boolean equals(Object anObject)将此字符串与指定的字符串⽐较boolean isEmpty()当且仅当字符串长度为0时返回true boolean startsWith(String prefix)判断此字符串是否以指定的字符串开始boolean contains(CharSequence cs)判断此字符串中是否包含指定的字符序列String toLowerCase()使⽤默认语⾔环境的规则将String 中的所有字符都转换为⼩写String toUpperCase()使⽤默认语⾔环境的规则将String 中的所有字符都转换为⼤写static String valueOf(int i)返回int 参数的字符串表⽰形式char[] toCharArray()将此字符串转换为⼀个字符数组String replace(CharSequence oldstr,CharSequence newstr)返回⼀个新的字符串,它是通过⽤newstr 替换此字符串中出现的所有oldstr 得到的String[] split(String regex)根据参数regex 将原来的字符串分割为若⼲⼦字符串JAVAAPI (⼀)String 类和StringBuffer 类1.String 类和StringBuffer 类在程序中经常会⽤到字符串,所谓的字符串就是指⼀连串的字符,它是由多个单个字符连接⽽成的。
关于JavaSE部分的常见及经典面试题
关于JavaSE部分的常见及经典面试题●Java基础及面向对象1.String和StringBuffer的区别?2.Object类有什么方法?3.final关键字的作用?4.final,finally,finalize的区别?5.assert是什么,在什么情况下用?6.String s = new String(“xyz”),创建了几个String Object?7.Math.round(11.5)和Math.round(-11.5)分别等于多少?8.short s1 = 1;s1 = s1+1和s1+=1有什么错?9.Java有没有goto关键字?10.数组有没有length()这个方法?String有没有length()这个方法?11.Overload和Override的区别?Overload的方法是否可以改变返回值类型?12.==和equals()的区别?13.分别用public 空(default) protected private 修饰属性时的访问控制图?14.为什么要配置环境变量?15.break,continue,return的作用及区别?16.用什么命令执行源代码(socure code)?17.面向对象的特征.●程序控制流程●集合框架1.List Set Map 有什么区别?他们分别有哪些方法?2.ArrayList 和LinkedList 的区别?3.HashMap和HashTable的区别?4.Collection 和Collections有什么区别?●流处理1.●多线程1.什么是线程?有哪些状态?如何实现多线程?2.什么是线程安全?3.说出你所知道的线程同步的方法?4.sleep()和wait()有什么区别?5.可以实现哪些接口创建新线程?6.在什么情况下,会中断执行中的线程?●时间和日期1.●端对端通信1.●异常捕获和处理1.一句话简述Error和Exception的区别?2.异常处理机制的简单原理和应用?3.如何自定义一个异常?●泛型●反射机制1.如何用反射调用一个已知类的已知方法?●继承和派生以及接口应用1.抽象类和接口的区别,他们在什么情况下会使用?2.匿名内部类是否可以继承其他类,是否可以实现接口?3.static nested class 和inner class的不同?●Java中的垃圾回收机制1.请叙述垃圾回收机制的优点和原理?2.GC是什么,为什么要试用GC?●基础算法1.如果系统要试用超大整数,请你设计一个数据结构来存储这个数字并设计一种算法实现其假发运算。
Java中String的理解
Java中String的理解Java中String的理解最近在读String的源码,看了些String的⽂章,⾃⼰对String作了下总结记录下来。
1.String为什么是不可变的?String是final类,不可继承,其⽅法也不可被覆盖,避免从⼦类操纵⽗类属性;String的值保存在private final char[]数组中,本质是⼀个字符数组,私有则外部不可访问和修改,final引⽤则引⽤(或说引⽤的值)不变。
引⽤可以简单地认为是堆上对象的⾸地址。
String内部的private int hash,缓存hash值,hashCode和equals⽤来⽐较对象相等,缓存hash可以减少运算时间提⾼效率。
但是,String的值char[]可以通过反射改变。
String不可变是出于安全和使⽤效率考虑的。
2.String的split,substring,replace,replaceAll等⽅法有哪些注意点?charAt,toLowerCase,toUpperCase,trim,toCharArray等常⽤⽅法并没有太多注意点。
split(String regex,int limit):regex,切⽚的正则;limit,切⽚数。
split(String regex):regex,切⽚的正则。
从这⾥可以看出切⽚是使⽤正则来切⽚的,⽽且要注意的是,尾部切⽚得到的空字符串""(注意没有空格)是不会出现的结果的字符串数组中的。
思考:String s=“,1,2,,3,,,”;String[] arr=s.split(",");arr的值是什么?结果是{"",“1”,“2”,“”,“3”}。
如果制定切⽚数limit则会按切⽚数切⽚。
substring(int beginIndex,int endInx):beginIndex是包含的,end不包含。
stringbuffer用法
stringbuffer用法StringBufferJava中的一个重要的工具类,它的功能是用来处理字符串的。
它是在 Java 1.0本中就开始被使用,目前最新的版本是 Java 8,目前仍在有效使用中。
StringBuffer以被视作是一个字符串容器,它可以处理大量字符串进行复杂的操作,更加方便快捷。
与 String不同,StringBuffer 不仅可以用来处理字符串,还可以处理基本类型的数据。
StringBuffer几种常用的用法,下面将详细介绍。
首先,StringBuffer构造函数:StringBuffer两种构造函数,一种是不带参数的构造函数,另一种是带参数的构造函数。
如果不带参数,则会创建一个容量为 16节的字符串缓冲区;如果带参数,则可以指定字符串缓冲区的容量,如:StringBuffer sb = new StringBuffer(1024);其次,StringBuffer append法:append法可以向字符串缓冲区中添加任意类型的参数,它将把参数转换为字符串,然后拼接到字符串缓冲区的末尾,如:StringBuffer sb = newStringBuffer();sb.append(Hello第三,StringBuffer insert法:insert法与 append法类似,都可以向字符串缓冲区添加参数,但是 insert法可以指定参数插入到字符串缓冲区的任意位置,如:StringBuffer sb = new StringBuffer(hello worldsb.insert(5,, );第四,StringBuffer delete法:delete法可以删除字符串缓冲区中的指定部分字符,可以指定删除开始位置和结束位置,如:StringBuffer sb = new StringBuffer(hello, worldsb.delete(5, 11);最后,StringBuffer reverse法:reverse法可以将字符串缓冲区中的字符串反转,如:StringBuffer sb = newStringBuffer(hello world!);sb.reverse();以上就是 StringBuffer常用用法,可以看出 StringBuffer一个功能强大的工具类,在处理字符串时能够帮助我们完成大量复杂的操作,极大地提高了我们处理字符串的效率。
传智播客-----笔记整理(java基础-----String,StringBuffer,StringBuilde)
这两天一直比较犯迷糊,每天都不知道在忙啥,所以有些断更了,真的是,咳咳,明天就要接手新班了,对我来说是喜忧参半吧,喜的是可以锻炼一下自己的能力,忧的是怕自己做不好,不过还是尽力吧。
大纲:String:1.1String方法1.2String特点1.3 StringBuffer1.4 StringBuilder1.5 Jdk升级的目的1.6 基本数据类型对象包装类1.7基本类型======>字符串1.8 字符串=====>基本类型1.9 整数具备不同的进制体现。
2.0自动拆装箱面试题挨个走一遍吧,Let's go.String:String对象的初始化由于String对象特别常用,所以在对String对象进行初始化时,Java提供了一种简化的特殊语法,格式如下:String s = “abc”;s = “Java语言”;其实按照面向对象的标准语法,其格式应该为:String s = new String(“abc”);s = new String(“Java语言”);只是按照面向对象的标准语法,在内存使用上存在比较大的浪费。
例如String s = new String(“abc”);实际上创建了两个String对象,一个是”abc”对象,存储在常量空间中,一个是使用new关键字为对象s申请的空间。
其它的构造方法的参数,可以参看String类的API文档。
1.1String方法获取获取字符串中字符的个数(长度)int length();根据位置获取字符char charAt(int index);根据字符获取在字符串中的第一次出现的位置int indexOf(int ch);【因为char类型可以转换成int(对应的是0---2^16),依据ASCII,返回-1时,表示这个字符不存在,此方法也可以判断字符是否存在。
】从指定位置进行ch的查找第一次出现位置int indexOf(int ch,int fromIndex);根据字符串获取在字符串中的第一次出现的位置int indexOf(String str);从指定位置进行ch的查找第一次出现位置int indexOf(String str,int fromIndex)根据字符获取在字符串中的最后一次出现的位置int lastIndexOf(int ch);从指定位置进行ch的查找最后一次出现位置int lastIndexOf(int ch,int fromIndex);根据字符串获取在字符串中的最后一次出现的位置int latindexOf(String str);从指定位置进行ch的查找最后一次出现位置int lastindexOf(String str,int fromIndex);获取字符串中一部分字符串,也叫子串String subString(int beginIndex,int endIndex);【包含begin,但不包含end】String substring(int beginIndex);从beginIndex到最后转换将字符串变成字符串数组(字符串的切割)String [] split(String regex):【里面的条件是一个正则表达式】将字符串变成字符数组char [] toCharArray();将字符串变成字节数组byte [] getBytes();将字符串中的字母转成大小写String toUpperCase();【大写】String toLowerCase();【小写】将字符串中的内容进行替换String replace(char oldch,char newch);String replace(String s1,String s2);将字符串两端的空格去除String trim();将字符串进行连接String concat(String str);判断两个字符串内容是否相同boolean equals(Object obj);【复写Object的方法,所以传递的是Object对象】boolean equalsIgnoreCase(String str);忽略大写比较字符串内容。
String、StringBuffer和StringBuilder区别
String、StringBuffer和StringBuilder区别String、StringBuffer和StringBuilder区别1、长度是否可变String 是被 final 修饰的,他的长度是不可变的,就算调⽤ String 的concat ⽅法,那也是把字符串拼接起来并重新创建⼀个对象,把拼接后的 String 的值赋给新创建的对象StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产⽣新的未使⽤对象,StringBuffer 与 StringBuilder 中的⽅法和功能完全是等价的。
调⽤StringBuffer 的 append ⽅法,来改变 StringBuffer 的长度,并且,相⽐较于 StringBuffer,String ⼀旦发⽣长度变化,是⾮常耗费内存的!2、执⾏效率三者在执⾏速度⽅⾯的⽐较:StringBuilder > StringBuffer > String3、应⽤场景如果要操作少量的数据⽤ = String单线程操作字符串缓冲区下操作⼤量数据 = StringBuilder多线程操作字符串缓冲区下操作⼤量数据 = StringBufferStringBuffer和StringBuilder区别1、是否线程安全StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最⼤不同在于 StringBuilder 的⽅法不是线程安全的(不能同步访问),StringBuffer是线程安全的。
只是StringBuffer 中的⽅法⼤都采⽤了 synchronized 关键字进⾏修饰,因此是线程安全的,⽽StringBuilder 没有这个修饰,可以被认为是线程不安全的。
2、应⽤场景由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使⽤ StringBuilder 类。
C#中StringStringBuilderStringBuffer类的用法
C#中StringStringBuilderStringBuffer类的⽤法String和StringBuilder和StringBuffer,这三个都是值得深究⼀翻的,可能很多⼈会说,实在不⾏的话,都全部⽤StringBuilder,啥事没有,我不能说你的想法事不正确的,但是我可以给出更好的建议。
下⾯简单介绍⼀下这三个类。
String类在我们平时的使⽤当中很容易不注意到的是,⾃⼰写的代码很容易发⽣了装箱的操作(把值类型转换为引⽤类型)。
就⽐如很常见的,⼀个字符串拼接string str=9+"test"; 通过查看IL代码可以知道这⾥发⽣了装箱的操作。
所以建议使⽤(在把值类型转换为字符串的时候,记得⽤ToString⽅法)。
所以平时写代码的时候,要注意下,装箱和拆箱的操作(之后推出的泛型集合不就是为了解决装箱和拆箱的操作)。
装箱操作的过程:把值类型放到托管堆⾥⾯分配内存,除了值类型本⾝所分配的内存外,内存总量还要加上类型对象指针和同步索引块所占⽤的内存,之后再将值类型的值重新分配到堆内存当中,最后再返回引⽤类型的对象的地址。
我们知道很多类型(值类型)都⾃带了⼀个ToString⽅法,为⽑⽤这个就不会发⽣装箱操作呢,很简单的⼀个道理,不是有⼈和你说String是特殊的值类型(虽然他是引⽤类型),C#语⾔的设计者,为了做到这⼀点,他想出了这个⽅法把String对象,⼀旦赋值就不可改变(叫做字符串的恒定性),赋值完了之后,再对String进⾏拼接,赋值等,都会再内存⾥⾯重新分配⼀个新的内存空间。
StringBuilder基于上⾯的问题,string类在重新赋值会重新去分配内存空间,所以为了解决这个问题,微软推出了⼀个StringBuilder的类。
可以看看StringBuilder类是如何做到不重新分配内存的呢。
通过阅读StringBuiler类的实现,我们可以发现internal const int DefaultCapacity = 0x10; StringBuilder类,默认的⼤⼩是16,意思就是说我们如果不指定StringBuilder长度,超过16个长度,就会重新去分配⼀次内存。
常用的类名
常用的类名在编程中,类是面向对象编程的基本单位,是一种封装数据和方法的方式,可以实现代码的重用和模块化。
在Java语言中,类是一个关键的概念,Java的标准类库中已经为我们提供了大量常用的类,这些类可以帮助我们快速实现各种功能。
本文将介绍一些常用的类名,以及它们的基本用法。
1. Object类Object类是Java语言中所有类的根类,它定义了一些基本的方法,比如equals()和hashCode()方法,这些方法可以被所有的Java类继承和使用。
在编写自己的类时,我们可以选择继承Object 类,从而获得它提供的一些基本功能。
2. String类String类是Java语言中最常用的类之一,它用于表示字符串。
String类提供了一系列方法,可以方便地操作字符串,比如substring()、indexOf()和toUpperCase()等方法。
在Java中,字符串是不可变的,也就是说,一旦创建了一个字符串对象,就不能再修改它的值。
因此,在进行字符串操作时,需要创建新的字符串对象来保存结果。
3. StringBuffer和StringBuilder类StringBuffer和StringBuilder类也是用于操作字符串的类,它们提供了一些方法,可以方便地添加、删除和修改字符串中的字符。
与String类不同的是,StringBuffer和StringBuilder类是可变的,也就是说,可以在原有的字符串上进行修改,而不需要创建新的字符串对象。
StringBuilder类是Java 5中新增的类,与StringBuffer类类似,但是它的性能更好。
4. Math类Math类是Java语言中用于数学运算的类,它提供了一些常用的数学方法,比如sin()、cos()和sqrt()等方法。
这些方法都是静态方法,可以直接通过类名调用。
5. Random类Random类是Java语言中用于生成随机数的类,它提供了一些方法,可以生成不同类型的随机数,比如nextInt()、nextDouble()和nextBoolean()等方法。
String StringBuilder StringBuffer区别
String str = “This is only a” + “ simple” + “test”;
其实就是:
String str = “This is only a simple test”;
所以不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的String对象的话,速度就没那么快了,譬如:
我们明明就是改变了String型的变量s的,为什么说是没有改变呢? 其实这是一种欺骗,JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来 执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。
对于三者使用的总结: 1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
1.三者在执行速度方面的比较:StringBuilder > StringBuffer > String
2.String <(StringBuffer,StringBuilder)的原因
String:字符串常量
StringBuffer:字符创变量
StringBuilder:字符创变量
4.StringBuilder与 StringBuffer
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
JAVA中String与StringBuffer的区别
JAVA中String与StringBuffer的区别在java中有3个类来负责字符的操作。
1.Character 是进行单个字符操作的,2.String 对一串字符进行操作。
不可变类。
3.StringBuffer 也是对一串字符进行操作,但是可变类。
String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去. String 是final类,即不能被继承.StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象它只能通过构造函数来建立,StringBuffer sb = new StringBuffer();note:不能通过付值符号对他进行付值.sb = "welcome to here!";//error对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中付值的时候可以通过它的append方法.sb.append("hello");字符串连接操作中StringBuffer的效率要比String高:String str = new String("welcome to ");str += "here";的处理步骤实际上是通过建立一个StringBuffer,让侯调用append(),最后再将StringBuffer toSting();这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值. 这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.看看以下代码:将26个英文字母重复加了5000次,1. String tempstr = "abcdefghijklmnopqrstuvwxyz";2. int times = 5000;3. long lstart1 = System.currentTimeMillis();4. String str = "";5. for (int i = 0; i < times; i++) {6. str += tempstr;7. }8. long lend1 = System.currentTimeMillis();9. long time = (lend1 - lstart1);10. System.out.println(time);可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为46687左右。
研发工程师面试笔试题目
研发工程师面试笔试题目(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作计划、工作总结、演讲致辞、合同协议、管理制度、心得体会、法律文书、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, our store provides various types of classic sample essays for everyone, such as work plans, work summaries, speeches, contract agreements, management systems, insights, legal documents, teaching materials, complete essays, and other sample essays. If you want to learn about different sample formats and writing methods, please pay attention!研发工程师面试笔试题目研发工程师面试难吗?求职面试时,面试官一般都会问你一些问题,也可能是通过问卷的形式提问,怎么回答才是最好的呢?这里给大家分享一些研发工程师面试笔试题目,希望对大家有所帮助。
c#之Stringbuilder、String、Append
c#之Stringbuilder、String、Append问题引出:StringBuilder sqlQuery = new StringBuilder();sqlQuery.Append("SELECT COUNT([ProductID]) FROM ~~where [IsDelete]='F' );1.StringBuilder和String的区别String aa="123456";aa+="789";StringBuilder text=new StringBuilder("123456",12);text.Append("789");如果你输出aa,和text 你会发现他们的输出内容是⼀样的。
但是aa的操作过程实际上是:⾸先在内存中分配⼀个地址空间,空间⼤⼩是6。
然后执⾏ aa+="789";的操作,该过程是连接字符串,“123456”和“789”并且在内存中重新分配地址。
把aa的内存地址指向 “123456789”的内存地址。
也就是说在内存中实际上是有两个空间被分配,第⼀的内存空间,在后来是由C#的垃圾处理机制来⾃动处理掉,如果我们⽤3 4 句的程序来实现这个过程,那么他是没有再次分配内存空间的,他就是在text的内存空间⾥进⾏了操作。
这⾥要说明下StringBuilder在⽣命变量的过程中是可以我们⾃⼰来分配他的⼤⼩的,如果实际的内容超出内存空间,他会⾃动翻倍。
通过上⾯的例⼦,我们可以知道 StringBuilder的优越性是在:第⼀:他不需要每次都去分配内存空间。
所以系统就没有必要去处理垃圾;第⼆:当我们需要多次的对⼀个字符串进⾏多次操作的时候,他的效率要远远⾼与string2.AppendAppend ⽅法可⽤来将⽂本或对象的字符串表⽰形式添加到由当前 StringBuilder 对象表⽰的字符串的结尾处。
stringbuffer的delete方法
stringbuffer的delete方法string与stringbuffer的区别简单地说,就是一个变量和常量的关系。
stringbuffer对象的内容可以修改;而string对象一旦产生后就不可以被修改,重新赋值其实是两个对象。
1.stringbuffer:stringbuffer的内部实现方式和string不同,stringbuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于string类。
所以在实际使用时,如果经常须要对一个字符串展开修正,比如填入、删掉等操作方式,采用stringbuffer必须更加适宜一些。
2.string:在string类中没有用来改变已有字符串中的某个字符的方法,由于不能改变一个java字符串中的某个单独字符,所以在jdk文档中称string类的对象是不可改变的。
然而,不可改变的字符串具有一个很大的优点:编译器可以把字符串设为共享的。
二、stringbuffer的常用方法stringbuffer类中的方法要偏重于对字符串的变化例如追加、插入和删除等,这个也是stringbuffer和string类的主要区别。
1.append方法public stringbuffer append(boolean b)该方法的促进作用就是新增内容至当前stringbuffer对象的末尾,类似字符串的相连接。
调用该方法以后,stringbuffer对象的内容也出现发生改变,比如:stringbuffer sb = new stringbuffer(“abc”);sb.append(true);则对象sb的值将变成”abctrue”。
则对象sb的值将变为”abctrue”。
使用该方法进行字符串的连接,将比string更加节约内容,例如应用于数据库sql 语句的连接,例如:string user = “test”;string pwd = “”;sb.append(“select * from userinfo where username=“).append(user).append(“ and pwd=”).append(pwd);这样对象sb的值就是字符串“select * from userinfo where username=test and pwd=”。
《Java基础入门》_课后习题答案大一计算机专业5
《Java基础入门》课后习题答案第5章Java中的常用类一、填空题1.在Java中定义了两个类来封装对字符串的操作,它们分别是String和StringBuffer2.java的操作日期的类有Date、Calendar、DateFormat3.java中专门用于将日期格式化为字符串的类是DateFormat4.System类中所提供的属性和方法都是静态的,想要引用这些属性和方法,直接使用System类调用即可5.已知sb为StringBuffer的一个实例,且sb. toString()的值为"abede,则执行sb.reverse()后,sb toString()的值为edcba二、判断题1. String对象和StringBuffer对象都是字符串变量,创建后都可以修改。
(×)2.用运算符==比较字符串对象时,如果两个字符串的值相同,结果为true。
(×)3. System类中currentTimeMillis方法返回一个long类型的值。
(√)4.Date、Calendar以及DateFormat类都位于java.util包中。
(×)5. String类的方法replace(CharSequence srtl, CharSequence srt22)返回一个新的字符串,它是通过用srt2替换此字符串中出现的所有srtl得到的。
(对)三、选择题1、C2、C3、B4、A5、B1.以下都是Math类的常用方法,其中用于计算绝对值的方法是哪个?(C)A. ceil()B. floor()C. abs()D. random()2.String s=abededcba";则s. substring(3,4)返回的字符串是以下选项中的哪个?(C)A. cdB. deC. dD. e3.要产生[20,999]之间的随机整数可以使用以下哪个表达式?(B)A.(int)(20+math. random()97)B. 20+(int)(Math. random( )*980)C.(int)Math.random() * 999D.20 + (int)Math.random() * 9804.下面的程序段执行后,输出的结果是以下哪个选项?(A)A. Beijing@2008B.@ Beijing2008C. Beijing2008@D. Beijing#20085.先阅读下面的程序片段:对于上述定义的变量,以下表达式的值为true的是哪个?(B)A. strl=str2:B. strl. equals(str2):C.str= = str3;D.以上都不对四、简答题1.简述String 和StringBuffer 有什么区别。
JAVA常用类的用法---String类-Math类
我们从看API文档都知道,JA V A提供了一些常用类,如String,Math,BigDecimal 等的用法。
String ,StringBuffer,,StringBuilder类字符串就是一连串的字符序列,JA V A提供了String 和StringBuffer两个类来封装字符串,并提供了系列方法来操作字符串对象。
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
StringBuffer对象则代表一个字符序列中变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append,insert,reverse,setCharAt,setLength等方法可以改变这个字符串对象的字符序列。
一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString方法将其转换为一个String对象。
JDK1.5后面增加了StringBuilder类。
它也代表了字符串对象。
实际上StringBuilder 和StringBuffer基本相似,两个类的构造器和方法基本相同。
不同的是StringBuffer是线程安全的,而StringBuilder则没有实现线程安全功能,所以以性能略高,因此我们需要创建一个内容可变的字符串对象,应该优先考虑使用StringBuilder类。
String类提供了大量构造器来创建String对象,具体大家查看API文档吧,我就不想写了。
char charAt(int index):取字符串中的指定位置的字符,其中,参数index指的是字符串中序数,字符串的序数从0开始,这个大家学过数组的都知道,我就不想多说了。
String s = new String("abcdefghijklmnopqrstuvwxyz");System.out.println("s.chatAt(5)"+s.charAt(5));//输出的结果是:fint compareT0(String anotherString):拿当前String对象与anotherString比较。
Java之字符串String,StringBuffer,StringBuilder
Java之字符串String,StringBuffer,StringBuilder String类:String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型⼀样使⽤,⽤双引号括起来进⾏声明。
在Java中⽤String类的构造⽅法来创建字符串变量。
声明字符串:声明⼀个字符串就是创建⼀个字符串对象。
//可以声明单个也可以同时声明多个字符串对象,声明不赋值,这个对象就是空,也就是 String a= null;String a;String b,c;创建字符串:给字符串赋值就是创建字符串的过程。
1.给字符串赋值的四种⽅法:(1).引⽤字符串常量String a="hi";String b="hello",c="world";String d;d="hello world";(2).利⽤构造⽅法直接实例化// 1.String a=new String("hello ");// 2.String b=new String(a);(3).利⽤字符数组实例化char[] charArr={'t','i','m','e'};String a=new String(charArr);String b=new String(charArr,0,2);//从数组第0个索引开始,取2个数(4).利⽤字节数组实例化2.把任何类型转换为字符串:valueOf() ⽅法System.out.println(String.valueOf(6)); //将6转换为字符串3.连接字符串+//使⽤ + 号拼接String a="123"+456;String b=a+"hello";//使⽤ += 拼接b+="您好";System.out.println(b);4.获取字符串的长度:length() ⽅法String a="123 456 789";//获取a的长度(包括空格)赋值给sint s=a.length();System.out.println(s);5.获取指定索引位置的字符:char() ⽅法String str = " a new world a new start ";System.out.println(str.charAt(3));// 取出字符串中制定索引位置的字符6.判断⼀个字符串是否包含另⼀个字符:contains() ⽅法String str = " a new world a new start ";System.out.println(str.contains("abc"));// 判断⼀个字符串是否包含另⼀个字符串7.获取指定位置的字符返回索引:indexOf() 获取指定位置的字符四种⽅法:String str="we are the world";System.out.println(str.indexOf("e"));System.out.println(str.indexOf("e",2));//索引2之后e出现的索引System.out.println(stIndexOf("e"));System.out.println(stIndexOf("e",8));//索引8之前出现的e8.截取字符串:String id="123456************";//获取第⼗五位索引到最后的数字String e4=id.substring(15);//获取第六位到⼗四位索引,即⽣⽇String bir=id.substring(6,14);System.out.println("您的⽣⽇是:"+bir);9.判断字符串是否相等:需要特别注意的是,如果定义两个字符串再⽤ == 去判断它们是否相等,那么他们的结果⼀定是false。
java初级面试题汇总(附答案)
java初级⾯试题汇总(附答案)本⾯试题分为⼗⼋个模块,分别是:Java 基础、多线程、反射、对象拷贝、Java Web 、异常、⽹络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM,如下图所⽰:共包含 208 道⾯试题,本⽂的宗旨是为读者朋友们整理⼀份详实⽽⼜权威的⾯试清单,下⾯⼀起进⼊主题吧。
模块⼀Java 基础1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,Java 开发⼯具包,提供了 Java 的开发环境和运⾏环境。
JRE:Java Runtime Environment 的简称,Java 运⾏环境,为 Java 的运⾏提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的⼯具。
简单来说:如果你需要运⾏ Java 程序,只需安装 JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。
2. == 和 equals 的区别是什么?对于基本类型和引⽤类型 == 的作⽤效果是不同的,如下所⽰:基本类型:⽐较的是值是否相同;引⽤类型:⽐较的是引⽤是否相同;代码⽰例:String x = "string";String y = "string";String z = new String("string");System.out.println(x==y); // trueSystem.out.println(x==z); // falseSystem.out.println(x.equals(y)); // trueSystem.out.println(x.equals(z)); // true代码解读:因为 x 和 y 指向的是同⼀个引⽤,所以 == 也是 true,⽽ new String()⽅法则重写开辟了内存空间,所以 == 结果为false,⽽ equals ⽐较的⼀直是值,所以结果都为 true。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
String StringBuffer区别用法2009-09-26 09:25String && StringBuffer的区别和用法2007/02/24 11:02String && StringBuffer的区别:非可变对象一旦创建之后就不能再被改变,可变对象则可以在创建之后被改变。
String对象是非可变对象;StringBuffer对象则是可变对象。
为获得更佳的性能需要根据实际情况小心谨慎地选择到底使用这两者中的某一个。
String类用来表示那些创建后就不会再改变的字符串,它是不可变的(immutable);StringBuffer类用来表示内容可变的字符串;例:1.String对象:String str = "Hello";str += "World";// JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为 String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"Hello"和"World"创建为两个新的 String 对象)。
之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它不是最初的str,而是最初的str的引用指向了新生成的String对象"HelloWorld"。
2.StringBuffer对象:StringBuffer strBuf = new StringBuffer("Hello");strBuf.append("World");// 程序将只产生两个对象:最初的strBuf :"Hello"和拼接时的String ("World"),不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。
节省额外的系统开销。
如何选择是使用String还是StringBuffer:取决于两种情况,第一种情况是需要连接的字符串是在编译期决定的还是在运行期决定的,第二种情况是你使用的是StringBuffer还是String。
1) 第一种情况:编译期决定相对于运行期决定;如:String str = "This " + "is " + "a " + "Java " + "program"; StringBuffer strBuf = new StringBuffer();strBuf.append("This ");strBuf.append("is ");strBuf.append("a ");strBuf.append("Java ");strBuf.append("program");此时,+操作符比StringBuffer.append()方法要快,WHY?这里编译器的优化起了关键作用,编译器简单地在编译期连接多个字符串。
它使用编译期决定取代运行期决定,在你使用new关键字来创建String对象的时候也是如此。
这里str对象在编译期就决定了而 StringBuffer对象是在运行期决定的。
运行期决定需要额外的开销当字符串的值无法预先知道的时候,编译期决定作糜谧址闹悼梢栽は戎赖氖?候,也就是说String str = "This " + "is " + "a " + "Java " + "program";这段代码在编译时,编译器会对程序作出优化,String str被优化成“This is a Java program”;而StringBuffer strBuf只会在运行时才处理。
所以效率是不一样的。
(注意,这里的String str = "This " + "is " + "a " + "Java " + "program";与 String str = "Hello";str += "World";是不一样的);2) 第二种情况:使用StringBuffer取代StringString str = "Hello";for(int i = 0; i < 40000; i++) {str += "World";}StringBuffer strBuf = new StringBuffer("Hello");for(int i = 0; i < 40000; i++) {strBuf.append("World");}此时,StringBuffer.append()方法要比+操作符快得多,WHY?原因是两者都是在运行期决定字符串对象,但是+操作符使用不同于StringBuffer.append()的规则;它是通过String和StringBuffer来完成字符串的连接操作的。
另外,在使用StringBuffer时,可以通过StringBuffer的构造函数来设定它的初始化容量,这样可以明显地提升性能。
这里提到的构造函数是StringBuffer(int length),length参数表示当前的StringBuffer能保持的字符数量。
如:(1)StringBuffer strBuf = new StringBuffer();for(int i = 0; i < 40000; i++) {strBuf.append("Hello");}(2)StringBuffer strBuf = new StringBuffer(100000);for(int i = 0; i < 40000; i++) {strBuf.append("Hello");}此时,(2) 的效率好于 (1),因为StringBuffer内部实现是char数组,当使用缺省的构造函数来创建StringBuffer对象的时候,因为没有设置初始化字符长度,StringBuffer的容量被初始化为16个字符,也就是说缺省容量就是16个字符。
当StringBuffer达到最大容量的时候,它会将自身容量增加到当前的2倍再加2,也就是(2*旧值+2)。
如果使用缺省值,初始化之后接着往里面追加字符,在追加到第16个字符的时候它会将容量增加到 34(2*16+2),当追加到34个字符的时候就会将容量增加到70(2*34+2)。
无论何事只要StringBuffer到达它的最大容量它就不得不创建一个新的字符数组然后重新将旧字符和新字符都拷贝一遍。
所以总是给StringBuffer设置一个合理的初始化容量值是错不了的,这样会带来立竿见影的性能增益。
(2)避免了复制数组的开销。
创建String对象:String str = "Hello";// JVM先根据内容"Hello"查找对象,如果没找到,则在heap(堆栈)*上创建新对象,并将其赋予str,否则使用已经存在的对象。
String str = new String("Hello");// 据内不管heap上有没有"Hello"这个对象,JVM都会在heap上创建一个新String对象;此时heap上可能会出现内容相同,地址不同的String对象。
推荐使用String str = "Hello";这种方法创建String类型的对象,这样会使heap中只存在唯一的一个存放"Hello"对象的内存地址;实际上我们不需要多个独立的"Hello"对象,因为要运行它们的话浪费时间+浪费内存。
我们也不必因使用new String("Hello");创建了多个”Hello”对象而发愁,可以使用intern()方法来避免在堆内存上创建重复的String对象来改善Java的运行性能。
String intern()方法检查字符串对象的存在性,如果需要的字符串已经存在,那么它将会引用指向已经存在的字符串对象而不是重新创建一个。
这和使用 String str = "Hello";这种方法创建对象就作用上来说是一致的。
使用intern():String str = new String("Hello");str = str.intern();String对象的比较:"==" //比较地址;"equals"//比较内容;String str1 = "a";String str2 = "a";String str3 = new String("a");str1 == str2 // truestr1 == str3 // falsestr1.equals(str2); // truestr1.equals(str3); // true但是StringBuffer类并没有实现Objcet类的Equals方法,所以不能用这个方法来比较两个StringBuffer类的字符串是否相等:StringBuffer strBuf1 = new StringBuffer(“a”);StringBuffer strBuf2 = new StringBuffer(“a”);System.out.println(strBuf1.equals(strBuf2));程序输出:false*这里想对“heap(堆栈)”做一下更正:应该是heap(堆),而非堆栈。
“堆”是一种通用的内存池,用于存放所有的Java对象。
当使用“new”实例化一个对象时,编译器会自动在堆里进行存储分配。
C++在堆栈中创建对象,Java对象引用存储在堆栈中;而Java对象并不存储于其中。