`

String与Long类型比较的陷阱

 
阅读更多
public class LongTest {
	public static void main(String[] args) {
		Long tt = 0l;
		
		System.out.println(tt);
		
		boolean flag = "0".equals(tt);
		boolean flag1 = "0".equals(tt.toString());
		
		System.out.println(flag);
		System.out.println(flag1);
	}
}



输出结果:
0
false
true


boolean flag = "0".equals(tt); 

分析:
在这段代码中tt为Long类型,不同类型对象比较永远返回false

String#equals
public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
分享到:
评论

相关推荐

    mybatis collection list string

    标题 "mybatis collection list string" 暗示了我们讨论的主题是关于MyBatis框架中与集合(List)和字符串(String)处理相关的问题。在MyBatis这个强大的持久层框架中,集合和字符串的使用非常常见,尤其是在进行数据库...

    Java基础方面陷阱.

    而引用数据类型如字符串(String)和数组,以及自定义类,需要注意的是,它们都是对象。陷阱在于,不理解“值”与“引用”的区别,可能会导致内存管理上的错误。 再者,运算符的使用也是面试中的常见考点。Java支持...

    C++程序设计陷阱 .

    首先,C++的类型转换陷阱是常见的问题之一。C++支持多种类型的转换,包括隐式和显式转换。隐式转换虽然方便,但也可能导致意料之外的行为,如窄化转换(narrowing conversion)可能导致数据丢失。例如,将大整型...

    理解 C#值类型与引用类型.docx

    - **字符串(string)**:虽然在语法上类似值类型,但`string`是引用类型,其内容不可变。 4. **内存部署** - **值类型**:通常存储在栈上,分配和回收速度快,但大小有限制。 - **引用类型**:存储在堆上,大小...

    Java基础复习笔记03我们不会注意的陷阱.pdf

    类型提升的顺序是:`String` > `double` > `float` > `long` > `int` > `char`, `short`, `byte`。如果表达式中涉及 `String`,结果将始终是 `String` 类型。 这些知识点对于理解和避免Java编程中的常见陷阱至关...

    C++class_convert.rar_c++类型转换_类型转换

    7. **类型转换的陷阱与最佳实践**:避免不必要的类型转换,尤其是可能导致精度损失或数据溢出的转换。始终确保在转换前后检查数据范围。在可能的情况下,优先使用安全的转换方法,如`std::to_string`和`std::from_...

    Java各种类型转换md,学习代码

    8. 常见的类型转换错误与陷阱 - 将大整数转换为小整数时可能会导致溢出。 - 将浮点数转换为整数时,可能丢失小数部分。 - 在类型转换时,应始终确保转换不会导致数据丢失或程序错误。 以上内容涵盖了Java中的...

    C++sizeof使用规则及陷阱分析

    5. **typedef 与 `sizeof`**:使用 `typedef` 定义的新类型与原有类型具有相同的大小。 - 示例: ```cpp typedef short WORD; typedef long DWORD; cout (sizeof(short) == sizeof(WORD)) ; // 输出 1,表示...

    V20-Java笔记整理-重要概念和常见陷阱梳理.docx

    - **==与equals的区别**:`==`用于比较两个基本类型变量或引用类型变量的地址;`equals()`用于比较两个对象的内容是否相同。 #### 三、数组 - **一维数组**:数组元素是一组相同类型的值。 - **二维数组**:由多个...

    Java 面试中的陷阱

    31. **switch on byte, long, String**:Java 7及以后版本支持switch on byte,Java 14支持switch on String。 32. **Singleton**:单例模式确保一个类只有一个实例,常见的实现方式有饿汉式、懒汉式、双重检查锁定...

    C语言陷阱解读

    strcpy(buf, "This string is too long!"); // 缓冲区溢出 ``` ##### 6.2 内存管理错误 动态内存分配和释放的错误是C语言中最常见的问题之一。例如,忘记释放内存或重复释放同一块内存都会导致程序崩溃或内存泄漏...

    Java面试中的陷阱

    - `Math.round(11.5)`返回`12`(类型为`long`),`Math.round(-11.5)`返回`-11`(类型为`long`)。`Math.round()`函数将小数四舍五入到最接近的整数,如果小数部分正好为0.5,则向上取整。 #### 十、short类型的...

    Java编程中须注意的细节.pdf

    要避免这种情况,应在表达式中至少有一个因子为long类型,这样整个表达式都会以long类型进行计算,从而避免溢出。 4. 负的十六进制和八进制字面常量问题 在Java中,整数字面常量(int或long)的类型由其后缀决定。...

    C++字符串输入

    此外,`std::string`提供了丰富的内置函数,如拼接、复制、比较等,极大地简化了字符串操作的复杂度。 #### C++字符串输入方法 在C++中,字符串输入可以通过多种方式进行: 1. **使用输入操作符(>>)** 对于C...

    java陷阱--面试(题集)杂谈

    不能作用于long,但可以作用于String(Java 7以后)。 第三十二,Singleton模式是一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。实现方式有多种,如饿汉式、懒汉式、双重检查锁定等。 以上是Java...

    Java核心基础+Java中的数据在内存中的存储

    Java的基本数据类型包括`int`、`short`、`long`、`byte`、`float`、`double`、`boolean`和`char`。这些类型的数据通常存储在栈中,因为它们的大小是固定的且生命周期明确。例如: ```java int a = 3; // 存储在栈中...

    java面试题总结面试宝典

    switch语句在Java中有限制,不能直接作用于long类型变量,但可以对byte、char、short、int类型以及枚举和String类型进行操作。 关于Java语言的核心特性,文档中提到了final关键字的用法,以及它修饰变量与方法时的...

Global site tag (gtag.js) - Google Analytics