[JavaSE] 认识String类 (equals、null、““)_string类型“”equals null

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:xhs1999xhs (备注Java)
img

正文

请添加图片描述

目录

String补充用法

上一篇文章我们详细比较了 String 的内存,但是我们大部分使用 String 都是比较内容,那么我们应该怎么做呢?其实很简单,比较内容我们只需要比较哈希值就行啦,或者用 equals方法比较字面值。

equals

用法:比较字面值

 public static void main(String[] args) {
     String str1="12";
     String str2="12";
     System.out.println(str1.equals(str2));
 }
//true 

注意: 比较前后关系

    public static void main(String[] args) {
        String str1="12";
        String str3=null;
        System.out.println(str3.equals(str1));
    }
//Exception in thread "main" java.lang.NullPointerException

这样写就歇菜了,引用值不能为null,接着互换位置

    public static void main(String[] args) {
        String str1="12";
        String str3=null;
        System.out.println(str1.equals(str2));
    }
//false

这样就没问题了!

null 与 " "

再来说一个大家容易忽略的问题

    public static void main(String[] args) {
        String str1="";//str1这个引用指向的字符串是空的
        String str2=null;//str2这个引用不指向任何对象
        System.out.println(str1.equals(str2));
    }
//false

结合上面的 equals 例子我们可以知道这样的写法不会报错,因为 str1 的指向是空不是null;

对参数为空判断,大家有没有注意过这种写法

    public static void func(String s) {
        //正确
        if(s == null || s.length()==0){
            System.out.println("参数不能为空!");
        }
    }

现在做一个更改

    public static void func(String s) {
        //错误
        if(s.length()==0 || s==null){
            System.out.println("参数不能为空!");
        }

这样就不对了,如果 **s** 为null,那么它是没有长度的,妥妥的给你报空指针异常!

字符串不可变?(反射)

String可以重新定义吗?

我们先来看一个案例,更改int[] 的值

public static void main(String[] args) {
//数组的整体赋值只有一次机会,就是在定义的时候
final int[] array = {1,2,3,4,5};
array = new int[]{4,5,6,7,8};
}

答案很显然不行,因为被 final 修饰了

再来看这个例子,我们做到吗?改变value值

public static void main(String[] args) {
String s1="12";
String s1="11";
}
//这种写法不可以,这是改变指向

那么我可以通过 对象.value 来修改呢?也不可以,因为源码中是私有的,图片上一篇里有。

那么也做不到吗?其实可以做到,用反射!

   public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
       String s1="12";
       Class<?> c1 = String.class;
       // 获取 String 类中的 value 字段,这个 value 和 String 源码中的 value 是匹配的
       Field valueField = c1.getDeclaredField("value");
       // 将这个字段访问权限设为 true
       valueField.setAccessible(true);
       // 把 str 中的 value 属性获取到
       char[] value = (char[]) valueField.get(s1);
       //修改value[0]的值
       value[0] = 'h';
       System.out.println(s1);
   }

对于这块内容的话 Nick 会在Java进阶中详细的讲,这里稍作了解哈~

为什么 String 要不可变?(不可变对象的好处是什么?)

  1. 方便实现字符串对象池. 如果 String 可变, 那么对象池就需要考虑何时深拷贝字符串的问题了.
  2. 不可变对象是线程安全的.
  3. 不可变对象更方便缓存 hash code, 作为 key 时可以更高效的保存到 HashMap 中.

在这里插入图片描述

Kafka实战笔记

关于这份笔记,为了不影响大家的阅读体验,我只能在文章中展示部分的章节内容和核心截图

image.png

  • Kafka入门
  • 为什么选择Kafka
  • Karka的安装、管理和配置

image.png

  • Kafka的集群
  • 第一个Kafka程序
  • image.png

afka的生产者

image.png

  • Kafka的消费者
  • 深入理解Kafka
  • 可靠的数据传递

image.png

image.png

  • Spring和Kalka的整合
  • Sprinboot和Kafka的整合
  • Kafka实战之削峰填谷
  • 数据管道和流式处理(了解即可)

image.png

  • Kafka实战之削峰填谷

image.png

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:xhs1999xhs (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
削峰填谷**

[外链图片转存中…(img-pTSLDM5d-1713695720128)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:xhs1999xhs (备注Java)
[外链图片转存中…(img-ohQuINTl-1713695720128)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 17
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字符串转数组(String to Array)可以使用Java的split()方法或正则表达式来实现。可以参考以下代码示例: ```java String line = "My name is Pankaj"; // 使用String的split()方法 String[] words = line.split(" "); System.out.println(Arrays.toString(words)); // 使用java.util.regex.Pattern Pattern pattern = Pattern.compile(" "); words = pattern.split(line); System.out.println(Arrays.toString(words)); ``` 在这个示例中,我们首先使用String的split()方法将字符串分割成字符串数组,并使用空格作为分隔符。然后我们使用java.util.regex.Pattern来实现相同的功能。 这样就可以将字符串转换为数组。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [java 字符串转数组(String to Array)](https://blog.csdn.net/u010290539/article/details/128084871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Java自学视频教程-JavaSE基础-常用API-01、String、ArrayList课程安排.mp4](https://download.csdn.net/download/weixin_54787054/88233243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值