tulip notes
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Star-Lord

希望一天成为大师的学徒
首页
  • 学习笔记

    • 《Vue》
  • 踩坑日记

    • JavaScript
  • MQ
  • Nginx
  • IdentityServer
  • Redis
  • Linux
  • Java
  • SpringBoot
  • SpringCloud
  • MySql
  • docker
  • 算法与设计模式
  • 踩坑与提升
  • Git
  • GitHub技巧
  • Mac
  • 网络
  • 项目构建合集
  • 一些技巧
  • 面试
  • 一些杂货
  • 友情链接
  • 项目发布
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 一些技巧

  • 面试

    • 面试问题集锦
    • Java热点经典问题集锦_1
    • Java中类跟数据相关问题_1
      • Java的 8种基本数据类型是哪些?
      • 字节和字符的区别?
      • Java开发中定义JavaBean的时候,为什么使用包装类型而选不用基本类型?
      • 什么是装箱和拆箱?
      • Integer包装类型的常量池?【扩展】
      • 类
        • Java中重载和重写的区别?
        • Java中的是否可以覆盖(重写)一个private或者static的方法?
        • ==和 equals 的区别
        • String有哪些常用方法
    • Java集合相关问题
    • Java并发与异常相关问题
    • Java循环条件判断相关
    • Redis面试题
    • 实际场景问题_1
    • 框架类技术问题集锦-1
    • 开发中遇到的问题_1
    • MySql面试相关
    • Java中业务相关问题
    • 软件测试面试问题
    • 软件测试面试answer
    • Java八股文系列
  • 一些杂货

  • 项目发布

  • 友情链接
  • 更多
  • 面试
EffectTang
2024-03-23
目录

Java中类跟数据相关问题_1

# Java中类跟数据相关问题_1

# Java的 8种基本数据类型是哪些?

Short、int、long、float、double、boolean、char、byte

一些理解记忆:

计算机存储是用二进制,高低电位,代表01,因此有了基础单位bit(二进制),

为了表示更多的数字,规定用8位表示一个字节byte。同时为了方便计算中的正确与错误,因此有boolean,

为了表示更多的数,整数和小数,于是有了short、int、long跟 float、double

最后发现需要特殊的字符,于是又加上了字符-char。后来String代替了char,但String不是基本类型。String 底层为char[]

# 字节和字符的区别?

字节是存储容量的基本单位(byte),字符是数字,字母,汉字以及其它语言的各种符号.

1字节 = 8个二进制单位;(位--简写bit)。一个字符由一个字节或多个字节的二进制单位组成

# Java开发中定义JavaBean的时候,为什么使用包装类型而选不用基本类型?

  1. 对象默认值:Java中的基本类型如int默认值是0,char默认值为空格,boolean默认值为false等。而它们对应的包装类(如Integer,Character,Boolean等)的默认值则是null。
  2. 集合类需要:如果我们想要将一些对象存入集合类中,则必须使用包装类,因为集合类不允许存储基本类型的元素。
  3. 面向对象的实现,包装类型是一个对象,更切合Java的面向对象思想,

# 什么是装箱和拆箱?

装箱:自动将基本数据类型转化为包装类型

拆箱:自动将包装类型转化为基本数据类型

# Integer包装类型的常量池?【扩展】

1.由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等(因为new生成的是两个对象,其内存地址不同)

		Integer i = new Intger(100);
    Integer j = new Intger(100);
    System.out.print(i==j);    //false
1
2
3

2.Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本类型int比较时,Java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)

		Integer i = new Integer(100);
    int j = 100;
    System.out.print(i==j);    //true
1
2
3

3.非new生成的Integer变量和new Integer()生成的变量比较时,结果为false.(因为非new生成的Integer变量指向的是Java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)

		Integer i = new Integer(100);        
    Integer j = 100;
    System.out.print(i==j);    //false
1
2
3

4.对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false.

				Integer i = 100;
        Integer j = 100;
        System.out.print(i==j);    //true;
        Integer i = 128;
        Integer j = 128;
        System.out.print(i==j);    //false
1
2
3
4
5
6

注意:Java在编译Integer i = 100; 时.会翻译成Integer i = Integer.valueOf(100); 而Java API中的Integer 类型的valueOf的定义如下,Java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j =127时,就会直接从缓存中取,就不会new了

# 类

# Java中重载和重写的区别?

重载:发生在同一个类里面两个或者是多个方法的方法名相同,但是参数不同的情况

重写:子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回值类型。覆盖者可能不会限制它所在覆盖的方法的访问。

# Java中的是否可以覆盖(重写)一个private或者static的方法?

Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

java中也不可以覆盖private的方法,因为private修饰的变量和方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到private变量或方法的,当然也不能覆盖。

# ==和 equals 的区别

①、==:用于比较两个对象的引用,即它们是否指向同一个对象实例。

如果两个变量引用同一个对象实例,== 返回 true,否则返回 false。

对于基本数据类型(如 int, double, char 等),== 比较的是值是否相等。

②、equals() 方法:用于比较两个对象的内容是否相等。默认情况下,equals() 方法的行为与 == 相同,即比较对象引用,如在超类 Object 中:

public boolean equals(Object obj) {
    return (this == obj);
}
1
2
3

然而,equals() 方法通常被各种类重写。例如,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;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

一个例子送上:

String a = new String("sugar");
String b = new String("sugar");

// 使用 == 比较
System.out.println(a == b); // 输出 false,因为 a 和 b 引用不同的对象

// 使用 equals() 比较
System.out.println(a.equals(b)); // 输出 true,因为 a 和 b 的内容相同
1
2
3
4
5
6
7
8

# String有哪些常用方法

  1. length() - 返回字符串的长度。
  2. charAt(int index) - 返回指定位置的字符。
  3. substring(int beginIndex, int endIndex) - 返回字符串的一个子串,从 beginIndex 到 endIndex-1。
  4. contains(CharSequence s) - 检查字符串是否包含指定的字符序列。
  5. equals(Object anotherObject) - 比较两个字符串的内容是否相等。
  6. indexOf(int ch) 和 indexOf(String str) - 返回指定字符或字符串首次出现的位置。
  7. replace(char oldChar, char newChar) 和 replace(CharSequence target, CharSequence replacement) - 替换字符串中的字符或字符序列。
  8. trim() - 去除字符串两端的空白字符。
  9. split(String regex) - 根据给定正则表达式的匹配拆分此字符串。
上次更新: 2025/04/23, 16:23:16
Java热点经典问题集锦_1
Java集合相关问题

← Java热点经典问题集锦_1 Java集合相关问题→

最近更新
01
面向切面跟自定义注解的结合
05-22
02
时间跟其他数据的序列化
05-19
03
数据加密与安全
05-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 EffectTang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式