zoukankan      html  css  js  c++  java
  • java String final + equal == 区别

    java String 是不可改变的类型。

    String a = "hello2";
    String d = "hello";
    final String b = "hello";
    String c = b + "2";// final相当于常量,编译阶段直接加入常量池

    String cc = “hello”+“2”; 类似于 final修饰的,在编译期间,会自动优化处理为:hello2 并加入常量池,所以和a比较相等,和e比较不等
    String e = d + "2";

    System.out.println((a == c));// true 
    System.out.println((a == e));//false
    System.out.println((e == c));//false

    //e.intern()方法会检查e是否在常量池中,如果不在则将e所指向的对象添加到字符串常量池中,并返回指向常量池中对象的引用

    e=e.intern();//e 是通过+ new出来的 在堆中,不在常量池中,所以加入常量池后,比较相等

    System.out.println((a == c));// true 
    System.out.println((a == e));//true
    System.out.println((e == c));//true

    String s=“a”+“b”+“c”;创建几个对象?   因为“+”号编译器会自动优化,所以只创建一个对象“abc” 并存在JVM常量区中

    以上使用equal都是相等的

  • 相关阅读:
    nsight system
    unity 拿到管线权限的解决方案
    Erlang cowboy 入门参考
    [Erlang]Mnesia分布式应用
    erlang浅谈
    erlang 中带下划线变量的使用
    erlang 符号相关基本语法
    Erlang与ActionScript3采用JSON格式进行Socket通讯
    Erlang游戏开发-协议
    Erlang之IO编程
  • 原文地址:https://www.cnblogs.com/todayjust/p/5679372.html
Copyright © 2011-2022 走看看