java字符串String概述、常用构造器和面试题
2018-03-15 13:50
302 查看
----------------------------- java字符串概述、常用构造器和面试题--------------------
数据类型
1. 基本数据类型
a. 数值型
(1) 整数类型(byte,short,int,long)
(2)浮点类型(float,double)
b. 字符型(char)
c. 布尔类型(boolean)
2. 引用数据类型
a. 类(class)
b. 接口(interface)
c. 数组([])
字符串的概述
publicclass test1 {
publicstaticvoidmain(String[] args) {
//定义一个字符串的变量,赋值"abc"
Stringstr = "abc";
str = str + "de";
System.out.println(str);
}
在定义String str = “abc”的时候。“abc”是常量存储数据共享区,定义时先会到数据共享区中去查找是否存在“abc”这样的字符串,如果存
储在的直接把“abc”的地址赋值给str,如果数据共享区中不存在“abc”那么就去创建一个“abc”。
常量字符串的特点:
不能改变
String类中,重写了Object的toString方法.
--------------------字符串的构造器---------------------------
String()
初始化一个新创建的String对象,使其表示一个空字符序列.
String(byte[] bytes)
通过使用平台的默认字符集解码指定的byte数组,构造一个新的String。
String(byte[] byte, int offset, int length)
通过使用平台的默认字符集解码指定byte子数组,构造一个新的String。
String(char[] value)
分配一个新的String,使其表示字符数组参数中当前包含的字符序列。
String(char[] value, int offset, int count)
分配一个新的String,它包含取字符数组参数一个字数组的字符。
String(String original)
初始化一个新创建的String对象,使其表示一个与参数相同的字符
序列:换句话说,新创建的字符串是该参数字符串的副本。
例子:
publicclass test2 {
publicstaticvoidmain(String[] args) {
//创建一个空字符串的对象;
String str = new String();
System.out.println("打印字符串str:" + str + "-----");
//定义一个字节数组
byte[] bs ={97,98,99,100,101,102,103};
//以字节数组作为参数的字符串对象的创建
String str1 = new String(bs);
//把字节数组中的每一个数值转换成相对应的ascii的字符后组装成字符串
System.out.println("以字节数组作为参数的字符串对象的创建:" + str1);
//第一个参数字节数组,第二个参数是从指定的索引开始,第三个参数截取长度
//注意数组长度越界
String str2 = new String(bs, 3, 4);
System.out.println("以字节数组作为参数的字符串截取创建:" + str2);
//创建一个字符数组
char[] cs = {'a','b','g','t','o'};
String str3 = new String(cs);
System.out.println("以字符数组作为参数创建字符串:" +str3);
//第一个参数字符数组,第二个参数是从指定的索引开始,第三个参数截取长度
//注意数组长度越界
String str4 = new String(cs,3,2);
System.out.println("以字符数组作为参数的字符串截取创建:" + str4);
//以常量的字符串类作为参数
String str5 = new String("qwe");
System.out.println("以常量字符串作为参数:" + str5);
}
}
打印结果:
打印字符串str:-----
以字节数组作为参数的字符串对象的创建:abcdefg
以字节数组作为参数的字符串截取创建:defg
以字符数组作为参数创建字符串:abgto
以字符数组作为参数的字符串截取创建:to
以常量字符串作为参数:qwe
-------------------------面试题-----------------------------
publicclass test3 {
publicstaticvoidmain(String[] args) {
//创建常量的字符串
String str = "helloworld";
//创建字符串的对象
String str1 = new String("helloworld");
//两个字符串地址的比较
System.out.println("两个字符串地址的比较:" + (str == str1));
//两个字符串值的比较
System.out.println("两个字符串值的比较:" + str.equals(str1));
System.out.println("-----------------------------");
//定义一个字符串的常量
String str2 = "renliang";
String str3 = "renliang";
//判断两个字符串地址是否相等
System.out.println("判断两个字符串地址是否相等:" + (str2 == str3));
System.out.println("-----------------------------");
String str4 = "hello";
String str5 = "world";
String str6 = "helloworld";
//str4和str5拼接后一定会产生新的字符串
//即使在数据共享区中存储拼接后的值相等的字符串,也会产生新的地址
System.out.println(str6 == (str4 + str5));
//如果是两个没有引用的常量做拼接那么就会去数据共享区中查找是否有相等的字符串
/
a194
/如果有相等的就不去创建新的字符串了,直接使用
System.out.println(str6 == ("hello" + "world"));
}
}
结果:
内存图:
String str = “hellworld”在数据共享区创建的是一个对象。
String str1 = new String(“helloworld”)
在堆中创建一个字符串的对象,然后再到数据共享区中创建一个字符串的常量的对象,然后把堆中的对象指向数据共享区中的对象。如果数据共享区有相同的字符串对象,则值需在堆中创建一个对象,然后[b]指向数据共享区中相同的常量字符串。[/b]
数据类型
1. 基本数据类型
a. 数值型
(1) 整数类型(byte,short,int,long)
(2)浮点类型(float,double)
b. 字符型(char)
c. 布尔类型(boolean)
2. 引用数据类型
a. 类(class)
b. 接口(interface)
c. 数组([])
字符串的概述
publicclass test1 {
publicstaticvoidmain(String[] args) {
//定义一个字符串的变量,赋值"abc"
Stringstr = "abc";
str = str + "de";
System.out.println(str);
}
在定义String str = “abc”的时候。“abc”是常量存储数据共享区,定义时先会到数据共享区中去查找是否存在“abc”这样的字符串,如果存
储在的直接把“abc”的地址赋值给str,如果数据共享区中不存在“abc”那么就去创建一个“abc”。
常量字符串的特点:
不能改变
String类中,重写了Object的toString方法.
--------------------字符串的构造器---------------------------
String()
初始化一个新创建的String对象,使其表示一个空字符序列.
String(byte[] bytes)
通过使用平台的默认字符集解码指定的byte数组,构造一个新的String。
String(byte[] byte, int offset, int length)
通过使用平台的默认字符集解码指定byte子数组,构造一个新的String。
String(char[] value)
分配一个新的String,使其表示字符数组参数中当前包含的字符序列。
String(char[] value, int offset, int count)
分配一个新的String,它包含取字符数组参数一个字数组的字符。
String(String original)
初始化一个新创建的String对象,使其表示一个与参数相同的字符
序列:换句话说,新创建的字符串是该参数字符串的副本。
例子:
publicclass test2 {
publicstaticvoidmain(String[] args) {
//创建一个空字符串的对象;
String str = new String();
System.out.println("打印字符串str:" + str + "-----");
//定义一个字节数组
byte[] bs ={97,98,99,100,101,102,103};
//以字节数组作为参数的字符串对象的创建
String str1 = new String(bs);
//把字节数组中的每一个数值转换成相对应的ascii的字符后组装成字符串
System.out.println("以字节数组作为参数的字符串对象的创建:" + str1);
//第一个参数字节数组,第二个参数是从指定的索引开始,第三个参数截取长度
//注意数组长度越界
String str2 = new String(bs, 3, 4);
System.out.println("以字节数组作为参数的字符串截取创建:" + str2);
//创建一个字符数组
char[] cs = {'a','b','g','t','o'};
String str3 = new String(cs);
System.out.println("以字符数组作为参数创建字符串:" +str3);
//第一个参数字符数组,第二个参数是从指定的索引开始,第三个参数截取长度
//注意数组长度越界
String str4 = new String(cs,3,2);
System.out.println("以字符数组作为参数的字符串截取创建:" + str4);
//以常量的字符串类作为参数
String str5 = new String("qwe");
System.out.println("以常量字符串作为参数:" + str5);
}
}
打印结果:
打印字符串str:-----
以字节数组作为参数的字符串对象的创建:abcdefg
以字节数组作为参数的字符串截取创建:defg
以字符数组作为参数创建字符串:abgto
以字符数组作为参数的字符串截取创建:to
以常量字符串作为参数:qwe
-------------------------面试题-----------------------------
publicclass test3 {
publicstaticvoidmain(String[] args) {
//创建常量的字符串
String str = "helloworld";
//创建字符串的对象
String str1 = new String("helloworld");
//两个字符串地址的比较
System.out.println("两个字符串地址的比较:" + (str == str1));
//两个字符串值的比较
System.out.println("两个字符串值的比较:" + str.equals(str1));
System.out.println("-----------------------------");
//定义一个字符串的常量
String str2 = "renliang";
String str3 = "renliang";
//判断两个字符串地址是否相等
System.out.println("判断两个字符串地址是否相等:" + (str2 == str3));
System.out.println("-----------------------------");
String str4 = "hello";
String str5 = "world";
String str6 = "helloworld";
//str4和str5拼接后一定会产生新的字符串
//即使在数据共享区中存储拼接后的值相等的字符串,也会产生新的地址
System.out.println(str6 == (str4 + str5));
//如果是两个没有引用的常量做拼接那么就会去数据共享区中查找是否有相等的字符串
/
a194
/如果有相等的就不去创建新的字符串了,直接使用
System.out.println(str6 == ("hello" + "world"));
}
}
结果:
内存图:
String str = “hellworld”在数据共享区创建的是一个对象。
String str1 = new String(“helloworld”)
在堆中创建一个字符串的对象,然后再到数据共享区中创建一个字符串的常量的对象,然后把堆中的对象指向数据共享区中的对象。如果数据共享区有相同的字符串对象,则值需在堆中创建一个对象,然后[b]指向数据共享区中相同的常量字符串。[/b]
相关文章推荐
- Java常用面试题17 计算文件中指定字符出现的次数
- java String常用操作以及比较用String与StringBuffer追加字符的执行效率【修订2】
- JAVA面试题之String处理--一字符取出重复的字符以及其个数
- java字符串String的常用方法
- 黑马程序员--java 基础之IO流 字符流与装饰模式概述 --06
- java string 判断中文汉字及中文字符
- java String 面试题详解
- 【深入Java字符串】(4)Java String常用方法
- Java常用面试题16 用IO和NIO两种方式实现文件拷贝
- Java常用面试题18 列出目录或者文件
- Java中char数组(字符数组)与字符串String类型的转换方法
- JAVA面试题解惑系列(六)——字符串(String)杂谈
- java对象转为java String的几种常用方法剖析
- Java多线程常用面试题(含答案,精心总结整理)
- C/C++常用字符类型char、CSting、string转化
- JAVA面试题解惑系列(二)——到底创建了几个String对象?
- Java 几道常见String面试题
- java 面试题 string 创建几个对象
- JAVA中String字符串特殊字符的分割问题
- Java.lang.StringBuilder常用类