Java—String类—1

Java—String类—1

实例化方法

直接赋值/构造法
String str1="hello";//直接赋值
String str2=new String("hello");//构造法
字符串相等比较

两种方法:

”==“:进行的数值比较,比较的是两个字符串对象的内存地址数值

“equals”:可以进行字符串内容比较

String str1="hello";
String str2=new String("hello");
System.out.println(str1==str2);//false
System.out.println(str1.equals(str2));//true
字符串常量是String的匿名对象

在java中本身没有提供字符串常量的概念,所有使用“”定义的内容本质上来讲都是String的匿名对象。

验证

String str1="hello";
String str2=new String("hello");
System.out.println(str1.equals(str));
System.out.println("hello".equals(str));//"可以进行对象引用",所以是对象

Tips:在用equals方法对指定字符串和用户输入字符串进行比较时,指定字符串方到前面,因为用户可能没有输入

发生NullPointerCase空指针异常

String str1=null;
Scanner scanner=new Scanner(System.in);
str1=scanner.nextLine();
System.out.println("hello".equals(str1));//

实例化区别

1.采用直接赋值
String str1="hello";
String str2="hello";
String str3="hello";
System.out.println(str1==str2);//true
System.out.println(str2=str3);//true
System.out.println(str1==str3);//true

是这个样子呢?

以上这种情况说明,三块对象引用指向一块空间;

其实,java采用的是共享机制

在JVM底层实际上回自动维护一个对象池,如果现在采用直接赋值对对象进行实例化,那么该实例化对象(字符串内容)会自动保存到该对象池中。如果下次再继续使用直接赋值的模式声明String类对象,此时对象池中如果有指定内容,将直接进行引用;如若没有,则开辟新字符串对象而后将其保存在对象池中下次使用。

2.采用构造法
String str1="hello";
String str2=new String("hello");

构造法:

1.会产生两块空间,其中一块,变成垃圾空间;

2.不会自动入池,但是可以手动入池intern()方法;

在这里插入图片描述

比较:

1.直接赋值,产生一块堆空间,并且字符串对象可以自动保存在对象池中以供瞎使用;

2.构造方法:会开辟两块堆空间,其中一块变成垃圾空间,不会自动保存到对象池中,可以用intern()自动赋值

字符串不可变更

在这里插入图片描述

String str="hello";
str+=" world";
str+="!!!";
System.out.println(str);

首先我们可以看出,字符串的内容不能改变,最后输出的不是初始值,是因为改变的是对象的引用指向;并且,每进行一次加操作,就会产生两块垃圾空间,所以java中尽量不要使用“+”操作。但是其实java在进行+操作时,会自动将String转化为StringBuffer并用intern()连接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值