java--基础知识--三大特殊类

三大特殊类包括:String类,Object类,包装类

String类

定义:不可变更的类(是被final所修饰的)String的拼接每次都会产生一个新的对象。

1丶赋值方式

直接赋值(内存在常量池):

String str = "Hello Bit"*;

构造法(内存在堆):

String str1 = new String("Hello bit");

在这里插入图片描述
直接赋值只会开辟一块堆内存空间,并且该字符串对象可以自动保存在对象池中以供下次使用。
构造方法会开辟两块堆内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用intern()方法手动入池。

String str = new String("Hello").intern();

一下赋值方式下内存分别位于:

public int data1 = 10;//堆
 public static int data2 = 20;//方法区
public static final int DATA = 30;//方法区
public final int DATA2 = 40;//堆

2丶面试题

String StringBuffer StringBuilder的区别和联系?

一丶StringBuffer是多线程情况下使用,synchronized是线程安全的关键字,StringBuilder没有 String也没有,这两是单线程情况下使用,不安全。

二丶String每次都会产生新的空间,StringBuffer 和StringBuilder 不产生新的空间(不产生垃圾空间)。

三丶String的拼接底层被优化为StringBuilder,会调用append进行拼接,结果将会调用StringBuilder的toString()

提示:如果在循环体内进行拼接,最好用StringBuilder

String每次拼接都会产生新的对象

 String str = "abc";
        System.out.println(Integer.toHexString(str.hashCode()));
        str = str+"def";
        System.out.println(Integer.toHexString(str.hashCode()));
        str = str+"gh";
        System.out.println(Integer.toHexString(str.hashCode()));
        System.out.println(str);

用append方法进行拼接不会产生新的空间

    System.out.println("======华丽的分割线======");
        StringBuffer stringBuffer = new StringBuffer();
        System.out.println(Integer.toHexString(stringBuffer.hashCode()));
        stringBuffer.append("ab");
        System.out.println(Integer.toHexString(stringBuffer.hashCode()));
        stringBuffer.append("cd");
        System.out.println(Integer.toHexString(stringBuffer.hashCode()));
        
        StringBuilder stringBuilder = new StringBuilder();
        System.out.println(Integer.toHexString(stringBuilder.hashCode()));
        stringBuilder.append("ab");
        System.out.println(Integer.toHexString(stringBuilder.hashCode()));
        stringBuilder.append("cd");
        System.out.println(Integer.toHexString(stringBuilder.hashCode()));

1.将字符数组中的所有内容变为字符串
2.将部分字符数组中的内容变为字符串
3.取得指定索引位置的字符,索引从0开始
4.将字符串变为字符数组返回

public class TestDemo1 {
    public static void main(String[] args) {


1      char[] value = {'a', 'b', 'c', 'd', 'e'};
        String str = new String(value);
        System.out.println(str);

2        String str1 = new String(value, 0, 2);
        System.out.println(str1);

3        String str2 = "WZM";
        char ch = str2.charAt(0);
        System.out.println(str2);

4        char[] ch1 = str2.toCharArray();
        System.out.println(Arrays.toString(ch1));


    }
}

在这里插入图片描述

字符串比较

1丶区分大小写的比较。
2丶不区分大小写的比较。
3丶比较两个字符串大小关系。

 String str1 = "Hello";
        String str2 = "hello";
 1        System.out.println(str1.equals(str2));
 2       System.out.println(str1.equalsIgnoreCase(str2));
 3       System.out.println(str1.compareTo(str2));

在这里插入图片描述

字符串查找
1丶判断一个字符串是否存在
2丶从头开始查找指定字符串的位置,查到了返回位置的开始索引,如果查不到返回-1.
3丶从指定位置开始查找子字符串的位置
4丶由后向前查找子字符串位置
5丶从指定位置由后向前查找
6丶判断是否以指定字符串开头
7丶从指定位置开始判断是否以指定字符串开头
8丶判断是否以指定字符串结尾

 String str1 = "Helloworld";
        System.out.println(str1.contains("world"));
        System.out.println(str1.indexOf("Wzm"));
        System.out.println(str1.indexOf("world"));
        System.out.println(str1.indexOf("llo",1));
        System.out.println(str1.lastIndexOf("He"));
        System.out.println(str1.lastIndexOf("Hello",5));
        System.out.println(str1.startsWith("Hello"));
        System.out.println(str1.startsWith("Hello",0));
        System.out.println(str1.endsWith("ld"));

在这里插入图片描述

字符串替换

1丶替换所有内容
2丶替换首个内容

    String str2 = "WzmHello";
        System.out.println(str2.replaceAll("Wzm","bit"));
        System.out.println(str2.replaceFirst("W","bi"));

在这里插入图片描述

字符串拆分

tring str = "super wzm hello bit";
      String [] result = str.split(" ");
        for(String s:result){
            System.out.println(s);
        }
        String [] result2 = str.split(" ",3);
        for(String s:result2){
            System.out.println(s);
        }

在这里插入图片描述

特殊情况* ^ . \ : |,这些需要使用“\“转义


     String str = "192.168.1.1";
     String[] str1 = str.split("\\.");
     for(String s:str1){
         System.out.println(s);
     }

在这里插入图片描述

字符串截取

默认截取区间是左闭右开

1丶从指定索引截取到结尾
2丶截取部分内容

 String str = "helloworld";
        System.out.println(str.substring(5));
        System.out.println(str.substring(0,5));

在这里插入图片描述

Object类

Object是java魔人提供的一个类,所有的类都会默认继承Object,所有类的对象都可以使用Object进行接收。

使用Object接受所有类的对象

 class  Person{ }
     class  Student{ }
     public class TestDemo1 {
         public static void main(String[] args) {
             fun(new Person());
             fun(new Student());
         }
         public  static void fun (Object obj){
             System.out.println(obj);//默认调用Object的toString方法
         }
     }

包装类

包装类就是讲基本数据类型封装到类中

装箱与拆箱:

装箱:把简单类型包装为一个对象。
Integer a = 10; // 自动装箱 // 调用的方法是Integer valueOf()
Integer a2 = new Integer(value:20); // 显示装箱

拆箱:把包装类拆分为一个对应的简单类型。
int i = a; // 自动拆箱 //调用的方法是 Integer. intvalue:()
double d= a.doublevalue(); // 显示拆箱 2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值