`

String

 
阅读更多

1:String是基本数据类型吗?

    byte int char long float double boolean short

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。

    为了提高效率节省空间,用StringBuffer类。

 

2:String s = "hello"; s = s + "world";执行后,原始的String对象中的内容到底变了没有?

    没有。String被设计成不可变(immutable)类。所以它的对象都是不可变对象。

 

3:String实现equals方法,new String("abc").equals(new String("abc"))结果为true

      StringBuffer没有实现equals方法,new StringBuffer("abc").equals(new StringBuffer("abc"))为false

 

4:把一段逗号分割的字符串转换成数组

    正则表达式,String str = "1,2,3";

    String[] obj = str.split(",")

 

5:数组没有length()方法,有length的属性,String有length()方法。

 

6:String s = "a"+"b"+"c"+"d";共创建了多少个对象?

    String s1 = "a";

    String s2 = s1 + "b";

    String s3 = "a"+ "b";

    System.out.println(s2 == "ab");

    System.out.println(s3 == "ab");

    第一条语句打印false,第二条打印true,这说明javac编译可以对字符串常量直接相加的

    表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,

    直接将其编译成一个这些常量相连的结果。

    题目中代码被编译器在编译时优化后,相当于直接定义一个"abcd"的字符串,所以,上面的代码

    只创建一个String对象。

    String s = "a"+"b"+"c"+"d"; System.out.println(s == "abcd");打印true

 

7:String StringBuffer StringBuilder区别

    String对一串字符进行操作,不可变类。

    StringBuffer对一串字符进行操作,可变类。

    String:

               为不可变对象,一旦被创建,就不能修改它的值。

                对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新值保存进去

                String是final类,即不能被继承。

    StringBuffer:

                 为可变对象,当需要修改时,不需要重新建立对象。只能通过构造函数建立。

                 StringBuffer zt = new StringBuffer();

                 对象被建立后,在内存中就会分配内存空间,并初始保存一个null。

                 向StringBuffer中的赋值的时候通过append方法。

                 zt.append("hello");

    StringBuilder:

                  不是线程安全的,一般用在单线程操作,如果需要同步,建议使用StringBuffer。

 

8:String s = new String("xyz");创建了几个String Object?二者有什么区别?

    两个或一个。"xyz"对应一个对象,这个对象放在字符串常量缓冲区,常量"xyz"不管出现多少遍

    都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,如果以前用过

    'xyz',这句代表就不会创建"xyz"自己了,直接从缓存区拿。

 

9:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成immutable类型?

 

相对于可变对象,不可变对象有很多优势:

        1).不可变对象可以提高String Pool的效率和安全性。如果你知道一个对象是不可变的,那么需要拷贝这个对象的内容时,就不用复制它的本身而只是复制它的地址,复制地址(通常一个指针的大小)需要很小的内存效率也很高。对于同时引用这个“ABC”的其他变量也不会造成影响。

        2).不可变对象对于多线程是安全的,因为在多线程同时进行的情况下,一个可变对象的值很可能被其他进程改变,这样会造成不可预期的结果,而使用不可变对象就可以避免这种情况。

分享到:
评论

相关推荐

    StringAPI.java

    Java String 类型 API 测试代码 1.String和char[]之间的转换 toCharArray(); 2.String和byte[]之间的转换 getBytes() Arrays工具类 : Arrays.toString(names) String类 String replace(char oldChar, ...

    public static String[] split(String s, String regex)

    public static String[] split(String s, String regex) s参数为待拆分字符串, regex参数有两种格式: 单字符的字符串(长度1),功能如下:split(“ab#12#453”, “#”) 返回带5个元素的数组:ab, #, 12, #, 453 ...

    《C++String深入详解2.0版》PDF

    一、 C++的string的使用 3 1.1 C++ string简介 3 1.2 string的成员 3 1.2.1 append 3 1.2.2 assign 4 1.2.3 at 4 1.2.4 begin 5 1.2.5 c_str 5 1.2.6 capacity 5 1.2.7 clear 6 1.2.8 compare 6 1.2.9 copy 6 1.2.10...

    String a="hello" String b="hello" a==b 返回true的问题分析

    String a="hello world"; //在java中有一个常量池,当创建String 类型的引用变量给它赋值时,java会到它的常量池中找"hello world"是不是在常量池中已存在。如果已经存在则返回这个常量池中的"hello world"的地址...

    详解C++ string常用截取字符串方法

    string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求: find(string strSub, npos); find_last_of(string strSub, npos); 其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子...

    StringUtil.java

    java编程中对字符串的各种方式的处理,包括(空字符串处理、判断是否是空字符串 null和"" 都返回 true、 把string array or list用给定的符号symbol连接成一个字符串、 判定第一个字符串是否等于的第二个字符串中的某...

    305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)

    305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)305-字符串函数string.h应用举例(51单片机C语言实例Proteus仿真和代码)...

    基于Keil实现字符串函数string.h的简单应用

    基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用...

    C语言头文件 STRING.H

    C语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING.HC语言头文件 STRING....

    C#_string_byte数组转换解析

    C# string byte数组转换解析 C# string byte数组转换实现的过程是什么呢?C# string byte数组间的转换需要注意什么呢?C# string byte数组间转换所涉及的方法是什么呢?让我们来看看具体的内容: C# string byte数组...

    c++作业设计string类

    设计string类 要求: 1、为该类定义构造函数,析构函数和赋值操作。构造函数至少应有三个:无参构造函数、C风格字符串构造函数和复制构造函数 2、为string类提供必要的成员函数,可以参考C++类库的string类提供了...

    C# char[]与string byte[]与string之间的转换详解

    1、char[]与string之间的转换 //string 转换成 Char[] string str=hello; char[] arr=str.ToCharArray(); //Char[] 转换成 string string str1 = new string(arr); 2、byte[]与string之间的转化 string str = 你好...

    《深入学习c++string》2.1版

    一、 C++的string的使用 4 1.1 C++ string简介 4 1.2 string的成员 4 1.2.1 append 4 1.2.2 assign 5 1.2.3 at 5 1.2.4 begin 6 1.2.5 c_str 6 1.2.6 capacity 6 1.2.7 clear 7 1.2.8 compare 7 1.2.9 copy 7 1.2.10...

    c++ string转换double

    string转换double string转换double string转换double string转换double

    C-Lib-string.c

    Linux的作者Linus Torvalds的C语言函数库源代码(部分)string.c <br>1 /* 2 * linux/lib/string.c 3 * 4 * Copyright (C) 1991, 1992 Linus Torvalds 5 */ 6 7 /* 8 * stupid library ...

    String和string区别以及string详解.doc

    String和string区别以及string详解

    string

    string

    protobuf根据DebugString输出字串反解pb对象的实例(C++)

    使用过protobuf的同学肯定对pb的DebugString相关方法再熟悉不过了,其作用就是打印输出pb对象。有些时候我们可能会有根据这个输出还原原始pb对象的需求。仔细观察发现输出并不是标准json格式,也就是说基于json→pb...

    String.h函数详解

    String.h函数详解 1、strcpy  函数名: stpcpy  功 能: 拷贝一个字符串到另一个  用 法: char *stpcpy(char *destin, char *source);  程序例:  #include <stdio.h>  #include <string.h>  int main...

    js中string和number类型互转换技巧(分享)

    1、string–>number string类型 *1 即可变成 number类型 2、number–>string number类型 +’‘ 即可变成 string 类型 [removed] function screenInfo() { var str = '012.8372'; var s = 0; str = str...

Global site tag (gtag.js) - Google Analytics