java从小白开始的练习(String构造器,内存分析与笔试题)

欢迎大家观看这篇文章,小编在此篇文章是补充小编此标题下String“字符串”内容的补充,同样也是对前面内容的回忆,想学习Java的小伙伴可以观看博主Java的标题的文章,好了废话不多说,下面进入学习时间!

目录

String的详解

String是引用类型,为什么不用new关键字进行创建就可以使用?

String的方法理解与源码讲解(jdk8.0,方法为常用方法)

final关键字修饰是不可变的,所以字符串像数组一样,内容,大小是国定不变的,只能创建新的字符串。

构造器 

方法:“+” (拼接字符串最常见方法)

方法一:length() ( 返回字符串的长度)

方法二:isEmpty() (查看字符串长度是否为0,返回true或者false)

 方法三:charAt(下标) (返回一个该下标的值,以char类型返回)

 方法四:indexof(下标) (返回指定字符ch在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回-1。)

方法五(非常重要):equals(比较对象) (判断字符串与比较对象是否相等,相等返回true,反之,返回false)

方法六 substring(开始下标,结束下标) (返回一个字符串,字符串截取开始下标开始到结束下标结束)

方法七 toString() (返回改字符串,不需要下标)

 方法八 join(字符串1,字符串2)(拼接二个字符串)

String内存分析

String笔试题(讲解一下下面代码)

判断下面代码运行结果?(参考String的内存空间进行解答!!!)

问下面代码创建了几个对象?


String的详解

String就是字符串

String是引用类型,为什么不用new关键字进行创建就可以使用?

因为字符串的使用太过于平凡了,使用就简化了String的使用。这样就减少了代码的冗余。(冗余:小编理解就是重复的次数)

String的方法理解与源码讲解(jdk8.0,方法为常用方法)

在jdk8.0当中字符串就是个char类型数组的,但在9.0时候改成了byte类型的数组

final关键字修饰是不可变的,所以字符串像数组一样,内容,大小是国定不变的,只能创建新的字符串。

构造器 

无参构造:一个空字符串对象

 有参构造:(有参构造太多了,小编举一个例子来看)就是将其它基本类型的数组转化为字符串

参数介绍: 

        byte [] :一个byte类型的数组

        hibye :字节

        offset:偏移量(当偏移量是2,就是从第二个数组开始)

        count:数量

方法:“+” (拼接字符串最常见方法)

String s = "I " +" love " +"you";

方法一:length() ( 返回字符串的长度)

方法二:isEmpty() (查看字符串长度是否为0,返回true或者false)

 方法三:charAt(下标) (返回一个该下标的值,以char类型返回)

 方法四:indexof(下标) (返回指定字符ch在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回-1。)

 

方法五(非常重要):equals(比较对象) (判断字符串与比较对象是否相等,相等返回true,反之,返回false)

 

 equals()方法进行比较,通过源码可以看出先比较内存地址是否相等(==判断的是内存地址),在比较值是否一样。因为String的存储不同,所以不要使用==来判断字符串是否相等!!!

方法六 substring(开始下标,结束下标) (返回一个字符串,字符串截取开始下标开始到结束下标结束)

方法七 toString() (返回改字符串,不需要下标)

 

 方法八 join(字符串1,字符串2)(拼接二个字符串)

 

方法9:split(regex -- 正则表达式分隔符。limit -- 分割的份数) (匹配给定的正则表达式来拆分字符串。)

 

String内存分析

 String str = "123";

使用上面方式创建一个字符串时,其实是在常量池(元空间)中创建一个字符串,将变量指向字符串的内存地址。(如下图)

 

String str = new String("123");

使用上面方式创建一个字符串时,是在堆中创建一个空间,空间指向常量池内存地址,变量指向了堆中的地址。(如下图)

 

String笔试题(讲解一下下面代码)

判断下面代码运行结果?(参考String的内存空间进行解答!!!

package com.lsf_leetcode.test;


public class Solution {
   public static void main(String[] args) {
        String str1 = "123";
        String str2 = "123";
        System.out.println(str1 == str2);  //true
        System.out.println(str1.equals(str2)); //true
        
        String str3 = new String("123");
        String str4 = new String("123");
        System.out.println(str3 == str4); //false
        System.out.println(str1.equals(str4)); //ture
       
        String s3 = "123";
        System.out.println(str3 == s3); //false

    }
  
}

问下面代码创建了几个对象?

package com.lsf_leetcode.test;


public class Solution {
    public static void main(String[] args) {
        String str1 = "123";
        String str2 = "123";
       
        String s3 = str1 + str2;
       

    }
}

 产生三个对象,字符串是不可变的,str1与str的拼接会产生一个新的字符串

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

韶光不负

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

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

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

打赏作者

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

抵扣说明:

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

余额充值