java:==的使用

本文深入探讨Java中字符串和Integer对象的比较机制,解析==运算符在不同情况下的行为,包括字符串字面量、new关键字创建的字符串、字符串常量池、Integer对象在特定范围内的比较以及基本数据类型与包装类之间的比较。
public class StringInMemory {
   public static void main(String[] args) {
        String a1="hello";
        String a2=new String("hello");
        System.out.println(a1==a2); //结果为false,a2在堆上


        String S1="hello";
        String S2=new String("hello");
        System.out.println(S1==S2.intern());  //结果为true,因为intern()是返回对象常量池中的值,如果常量池中没有它的值,那就创建一个
        //然后再返回


        String p1="hello";
        String p2="he"+"llo";
        System.out.println(p1==p2);  //结果为true ,p2中两个值相加jvm可以做优化。
        //对比:
        String m1="hello";
        String m2="he";
        String m3="llo";
        String m4=m2+m3;
        System.out.println(m1==m4);  //结果为false,m2m3两个变量相加,jvm没有办法优化成常量值,等于在堆上又生成一个对象,但并没有给他赋值
        //所以堆上的对象和常量池中的对象相比是不等的

        int i1=10;
        Integer i2=10;
        System.out.println(i1==i2);  //结果为true

        Integer w1=10;
        Integer w2=10;
        System.out.println(w1==w2);  //结果为true

        //Integer在-128到127范围内,它都在常量池中创建。如果有返回引用,没有就创建,再范围

        Integer r1=128;
        Integer r2=128;
        System.out.println(r1==r2);  //结果为false
        //因为是128 超范围了,不在常量池里

      //所以int等基本数据类型不管多少都在常量池里面,而Integer要看范围,范围内就在常量,超范围就不在了


    }

}

 

<think> 我们需要将这段Kotlin代码转换为Java代码。Kotlin中使用的是可空类型和属性声明,而在Java中我们需要声明为类成员变量,并初始化为null。 注意:Kotlin中的`var`在Java中对应为普通变量,`TextView?`表示可以为null,在Java中我们使用`TextView`并初始化为null。 由于Kotlin中这些变量都是类属性,在Java中我们同样声明为类成员变量。 转换步骤: 1. 将`var`改为具体类型声明。 2. 由于Kotlin中这些变量都是可空的,在Java中我们使用`@Nullable`注解或者直接声明为可空(Java中所有对象引用都是可空的)。 3. 在Java中,我们不需要`?`来标记可空,直接声明类型即可,初始化为null。 注意:如果这些变量在Kotlin中是public的,那么在Java中我们也声明为public;如果是private,则声明为private。这里原代码是private,所以我们在Java中也用private。 转换结果: </think> 以下是将提供的 Kotlin 代码转换为等效的 Java 代码: ```java private TextView djState = null; private View djStateO = null; private TextView ykqState = null; private View ykqStateO = null; private TextView fztState = null; private View fztStateO = null; private TextView qlState = null; private View qlStateO = null; private TextView soc = null; private TextView voltage = null; private TextView electricity = null; private TextView lMotorSpeed = null; private TextView rMotorSpeed = null; private TextView lYkqMotorSpeed = null; private TextView rYkqMotorSpeed = null; private TextView carState = null; ``` ### 转换说明: 1. **变量声明语法**: - Kotlin: `private var djState : TextView? = null` -Java: `private TextView djState = null;` - 移除了 Kotlin 的可空类型标记 `?`(Java 中所有对象引用默认可为 null) - 使用 Java 的标准变量声明语法(类型在前,变量名在后) 2. **类型处理**: - 所有 `TextView?` 转换为 `TextView` - `View?` 转换为 `View` - 移除了 Kotlin 的类型注解符号 `:` 3. **初始化**: - 保持 `= null` 初始化方式 - 在 Java 中明确指定类型而不是使用 `var` 4. **空安全处理**: - Java 中没有原生空安全机制 - 使用时需要显式进行 null 检查: ```java if (djState != null) { djState.setText("Active"); } ``` ### 完整类示例: ```java public class VehicleStatusView { private TextView djState = null; private View djStateO = null; private TextView ykqState = null; private View ykqStateO = null; private TextView fztState = null; private View fztStateO = null; private TextView qlState = null; private View qlStateO = null; private TextView soc = null; private TextView voltage = null; private TextView electricity = null; private TextView lMotorSpeed = null; private TextView rMotorSpeed = null; private TextView lYkqMotorSpeed = null; private TextView rYkqMotorSpeed = null; private TextView carState = null; // 初始化方法示例 public void initViews(View rootView) { djState = rootView.findViewById(R.id.dj_state); djStateO = rootView.findViewById(R.id.dj_state_overlay); // 其他视图初始化类似... } // 更新方法示例 public void updateCarState(String state) { if (carState != null) { carState.setText(state); } } } ``` ### 关键差异说明: 1. **空安全**: - Kotlin 使用 `?` 明确标记可空类型 - Java 中所有对象引用都隐式可空,需要开发者手动处理 2. **类型推断**: - Kotlin 的 `var` 支持类型推断 - Java 必须显式声明类型 3. **初始化要求**: - Kotlin 要求非空属性必须在构造函数中初始化 - Java 没有此限制,但推荐初始化以避免 NPE 4. **访问方式**: - Kotlin 使用属性访问语法(直接 `djState`) - Java 使用传统的 getter/setter 或直接字段访问 ### 最佳实践建议: 1. **添加空检查**: ```java public TextView getDjState() { if (djState == null) { throw new IllegalStateException("djState not initialized"); } return djState; } ``` 2. **使用注解辅助**: ```java @Nullable private TextView djState = null; @NonNull private TextView getSafeDjState() { if (djState == null) { djState = new TextView(context); } return djState; } ``` 3. **延迟初始化**: ```java private TextView djState; // 不立即初始化 public void init() { djState = findViewById(R.id.dj_state); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值