String
程序员文章站
2022-04-15 18:57:35
String1. 概念String是引用数据类型,表示字符串(其实是由多个字符组成的)2 .String类特点String是final修饰的,所以是最终类,最终类是不能被继承的,既然不能被继承也就意味着里面的方法不能被重写3. 字符串常量池字符串是常量,所有的字符串常量都是存储在常量池中的,每个常量在常量池中都有地址;在常量池中,如果定义的常量在常量池中已经存在,则不会再进行创建,而是直接拿来用,如果不存在就创建一个常量扔进常量池中/4.String对象的创建形式public...
String
1. 概念
String是引用数据类型,表示字符串(其实是由多个字符组成的)
2 .String类特点
String是final修饰的,所以是最终类,最终类是不能被继承的,既然不能被继承也就意味着里面的方法不能被重写
3. 字符串常量池
字符串是常量,所有的字符串常量都是存储在常量池中的,每个常量在常量池中都有地址;在常量池中,如果定义的常量在常量池中已经存在,则不会再进行创建,而是直接拿来用,如果不存在就创建一个常量扔进常量池中
/
4.String对象的创建形式
public static void main(String[] args){
String str = new String("haha");
String str2 = new String("haha");
System.out.println(str == str2);
String str3 = "hello";
String str4 = "hello";
System.out.println(str3 == str4);
//面试题:下面的代码创建了几个对象
String str5 = "how"+"are"+"you";//1
String str6 = "howareyou";
System.out.println(str5 == str6);
String str7 = new String("happy");//2
String str8 = "so";
String str9 = "handsome";
String str10 = "sohandsome";
String str11 = str8 + str9;
System.out.println(str10 == str11);
}
5.常见方法的使用
String str = "hello";
//charAt() 获取指定索引对应的char值
System.out.println(str.charAt(0));
//indexOf() 返回指定字符对应的下标
System.out.println(str.indexOf("ll"));
//lastIndexOf() 返回指定字符对应的下标(反向查找)
System.out.println(str.lastIndexOf('l'));
//compareTo() 比较两个字符串的先后顺序(自然排序)
//ASCII码表 a对应数字97 b 98 A65 B66
System.out.println("abc".compareTo("aba"));
//contains() 是否包含指定的字符串
System.out.println("hello world".contains(str));
//endsWith() 以指定字符结尾
System.out.println("www.baidu.com".endsWith(".cn"));
//isEmpty() 判断指定字符串是否为空(是否是空字符串 null代表空对象)
System.out.println(" ".isEmpty());
//split() 根据指定的字符对字符串进行分割
String imgs = "1.jpg,2.jpg,3.jpg";
String[] imgsArr = imgs.split(",");
for(int i=0;i<imgsArr.length;i++) {
System.out.println(imgsArr[i]);
}
System.out.println("------------");
//获取指定图片的后缀 找到最后一个.,一直到字符的结尾
String picPath = "f1ew5f1ew56f1ew5.aa.jpg";
int startIndex = picPath.lastIndexOf(".");
int endIndex = picPath.length();
//获取到的后缀 subString(int startIndex ,int endIndex) 包含开始,不包含结束
//String suffix = picPath.substring(startIndex, endIndex);
//指定开始的位置,默认结束的位置是直到字符串的末尾
String suffix = picPath.substring(startIndex);
System.out.println(suffix);
//trim() 去掉字符串前后的空白
String trim = " a a ";
System.out.println(trim.trim());
**注意:**基本数据类型和引用数据类型之间不能进行强制类型转换
6.数字转字符串的方式
int num = 5;
String numStr = num + "";
//valueOf() 将指定的类型转换为String类型
String str = String.valueOf(num);
System.out.println(str);
String str = new String("haha");
String str2 = new String("haha");
System.out.println(str == str2);
//字符串中的equals方法是先比较地址,如果地址不同再比较值是否相同
System.out.println(str.equals(str2));
//源码分析
if (anObject instanceof String) {//判断传递过来的对象是否是字符串类型
String anotherString = (String)anObject;//将对象强制类型转换为String
int n = value.length;//获取当前字符串的长度
if (n == anotherString.value.length) {//比较两个字符串的长度是否相等
//字符串是由字符数组组成的,比较字符串是否相等,就是将单个的字符分别进行比较
char v1[] = value;
char v2[] = anotherString.value;
/*int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}*/
for(int i=0;i<v1.length;i++){
if(v1[i] != v2[i]){
return false;
}
}
return true;
}
}
7.
面试题:数组当中使用的是length属性还是length方法?
数组中使用的length属性,String中使用的是length()
面试题(重点):java中==和equals的区别
==号如果比较的是基本数据类型,那比较的值是否相等,如果比较的是引用数据类型,那比较的是地址是否相同;在String类中equals先比较地址,地址不相同再比较值是否相同。
8.总结
package cn.yunhe.str;
public class StringDemo {
public static void main(String[] args) {
method4();
}
/**
* 字符串对象的创建
* 1、字符串本身是引用数据类型,可以通过new关键字进行对象的创建
* 2、字符串又比较特殊,它也可以直接赋值的形式进行字符串对象的创建
* 上述的区别在哪里呢?
* API中说明:字符串都是常量
* 字符串常量都在常量池(方法区)中存储,是有自己的地址的,通过new关键字创建出来的对象在堆内存中
* 常量池:如果要指定某一个常量进行使用,首先会先去常量池中查看该常量是否已存在,如果已存在直接拿来用,如果不存在就创建一个放进常量池中
*/
public static void method4() {
String str = new String("haha");
String str2 = new String("haha");
System.out.println(str == str2);//false
String str3 = "hehe";
String str4 = "hehe";
System.out.println(str3 == str4);//true
System.out.println("------");
String str6 = "hello";
String str7 = "world";
String str8 = "helloworld";
String str9 = str6 + str7;//对已经创建好的对象进行了拼接
System.out.println(str8 == str9);//false
System.out.println(str8.equals(str9));//true
System.out.println("------");
String str0 = "a"+"b"+"c";//先拼接再创建对象
String str01 = "abc";
System.out.println(str0 == str01);
System.out.println(str0.equals(str01));
}
/**
* 1、地址判断
* 2、将传递过来的字符串转换为字符数组,判断长度是否相同
* 3、根据下标的位置,逐个比较字符是否相同
*
* 面试题:==和equals的区别
* ==用于基本数据类型时比较的是值,用于引用数据类型比较的时地址
* equals在字符串中是先比较地址后比较内容
*/
public static void method3() {
//equals() 重写了Object中的equals方法,先比较地址,地址不同,然后比较内容,地址相同就直接返回true
String str = new String("hello");
String str2 = new String("hello");
System.out.println(str == str2);//false 地址不同
System.out.println(str.equals(str2));//true
}
/**
* String中有用的且常用的方法
*/
public static void method2() {
//replace() 替换
String url = "http://www.news.baidu.com";
String newUrl = url.replace("baidu", "jd");
System.out.println(newUrl);
//substring() 截取 如果只有一个参数,代表开始,直到末尾结束
System.out.println(url.substring(7));
//substring() 截取 如果有两个参数,参数一代表开始,参数二代表结束位置(不包含)
System.out.println(url.substring(7, url.length()));
//split() 分割 参数代表要拆分的依据 \\.
String[] urlArr = url.split("\\.");
System.out.println(urlArr[urlArr.length-2]);
System.out.println("转换为纯大写:"+url.toUpperCase());
}
/**
* String中的有用的不是很常用的方法
*/
public static void method() {
String str = "hi juni";
System.out.println("指定索引出的char值:"+str.charAt(1));
System.out.println("指定char值对应的索引:"+str.indexOf('i'));
System.out.println("指定char值对应的索引:"+str.lastIndexOf('i'));
String compare1 = "adc";
String compare2 = "aac";
System.out.println(compare2.compareTo(compare1));
System.out.println(compare2.concat(compare1));
System.out.println("是否包含指定的字符串:"+str.contains("hello"));
String url = "https://www.baidu.com";
System.out.println(url.endsWith("cn"));
System.out.println(url.startsWith("http"));
//将字符串转换为字节数组
byte[] bts = str.getBytes();
//print(bts);
System.out.println("判断字符串是否为空字符:"+"".isEmpty());
}
/**
* String中的构造方法
*/
public static void constructorMethod() {
String str = new String();
System.out.println(str+"--"+null);
String str2 = new String("haha");
System.out.println(str2);
String str3 = "heihei";
System.out.println(str3);
byte[] byteArr = {97,99,98,100};
String str4 = new String(byteArr);
System.out.println(str4);
char[] charArr = {'a','b','c'};
String str5 = new String(charArr);
System.out.println(str5);
//源码的写法
String result = "";
for(int i=0;i<charArr.length;i++) {
result = result + charArr[i];
}
System.out.println(result);
}
/**
* 遍历数组
* @param arr
*/
public static void print(byte[] arr) {
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
}
本文地址:https://blog.csdn.net/qq_52232797/article/details/109648525
上一篇: restTemplate上传文件
下一篇: 学习笔记(按奇偶排序数组 II)
推荐阅读
-
php addslashes和mysql_real_escape_string
-
解决mysql不能插入中文Incorrect string value
-
Python的string模块中的Template类字符串模板用法
-
1366, "Incorrect string value: '\\xF0\\x9F\\x98\\x81'
-
Prototype String对象 学习_prototype
-
PHP获取现阶段url路径的函数:QUERY_STRING、REQUEST_URI、SCRIPT.
-
linux svn 检出更新时报错svn: Can't convert string from 'UTF-8' to native encoding:解决办法
-
PHP String函数分类,phpstring函数_PHP教程
-
c#中string的特性介绍及注意事项小结
-
IE8下String的Trim()方法失效的解决方法_jquery