String详细解释

/******************************************************************************
比较创建线程的两种方式。
开发中:优先选择:实现Runnable接口的方法。
原因:1.实现的方式没有类的单继承性的局限性
2.实现的方式更适合处理多线程的共享数据的情况。
联系: public class Thread implements Runnable 。Thread本身也实现了Runnable接口。
相同点:两种方式都需要重写run()方法,将线程要执行的逻辑声明在run()中。

String类:代表字符串。java程序中所有字符串字面值都为类的实例出现。
1.String 是一个final类,代表不可变的字符序列。
2.字符串是一个常量,用双引号引起来表示。他们的值在创建后不能更改。
3.String 对象的字符内容是存储在一个字符数组value[]中。
*******************************************************************************/
public class Main
{
/*String:字符串,使用一队""引起来表示。
1.String 声明为final的,不可以被继承。
2.String 实现了Serializable接口:表示字符串是支持序列化的。
实现了Comparable 接口:表示String可以比较大小。
3.String内部定义了fianl char[] value 用于存储字符串数据。
4.String 代表不可变的字符序列。简称:不可变性。
体现:1.当给字符串重新赋值是,需要重新指定内存区域赋值,不能使用原有的value进行赋值。
2. 当对现有的字符串进行链接操作时,也需要重新指定内存区域赋值,不能使用原有的内存区域。
3.当调用String的replace()方法修改指定字符或字符串时,需要重新指定内存区域赋值,不能使用原有的value进行赋值。
5.通过字面量的方式(区别与new)给一个字符串赋值,此时的字符串声明在字符串值声明在字符串常量值池中。
6.字符串常量池中不会存储两个相同内容的一个串。

*/

/* public static void main(String[] args) {
String s1 = “abc”;//字面量定义方式,不用去new 可以直接赋值,正常变量都需要new。
String s2 = “abc”;
// s1 = “hello”;
System.out.println(s1 == s2);//true
System.out.println(s1);//s1:hello
System.out.println(s2);//s2:abc

     String  s3 = "abc";
     s3+="def";
     System.out.println(s3);//s3:abcdef
     System.out.println(s2);//s2:abc,说明s3新造了一块内存存储s3不使用s1,s2共用的地址值。
     
     String s4 = "abc";
     String s5 = s4.replace(oldChar:'a',newChar:'m');
     System.out.println(s4);//abc
     System.out.println(s5);//mbc
     
}*/

/*
String 的实例化方式:
方式一:通过字面量定义方式。
方式二:通过new + 构造器的方式。

String s = new String(“abc”);方式创建对象,内存创建了几个对象?
两个:一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:“abc”.

/
/
public static void main(String[] args){
//通过字面量定义方式:此时s1与s2声明的数据声明在javaEE在方法区中的字符串常量池中。
String s1 = “javaEE”;
String s2 = “javaEE”;
//通过new + 构造器的方式:此时的S3与S4保存的地址值,是数据在堆空间中开辟开辟空间以后对应的地址值。
String s3 = new String(“javaEE”);
String s4 = new String(“javaEE”);

    System.out.println(s1 == s2);//true
    System.out.println(s1 == s3);//false
    System.out.println(s1 == s4);//false
    System.out.println(s3 == s4);//false
   
   
   
   
   
   
}
*/

/*
结论: 1.常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量。
2.只要其中有一个变量,结果就在堆中。
3.如果拼接的结果调用intern()方法,返回值就在常量池中。

*/
public static void main(String[] args){
String s1 = “javaEE”;
String s2 = “hadoop”;
String s3 = “javaEEhadoop”;
String s4 = “javaEE”+“hadoop”;
String s5 = s1+“hadoop”;
String s6 = “javaEE”+s2;
String s7 = s1+s2;
String s8 = s5.intern();//返回值得到的s8使用常量值中的已经存在的"javaEEhadoop";
System.out.println(s3 == s4);//true
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false
System.out.println(s5 == s6);//false
System.out.println(s5 == s7);//false
System.out.println(s6 == s7);//false
System.out.println(s3 == s8);//true

}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风strong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值