2023年7月13日,Stream流,Stream流的获取,Stream流中间聚合操作,Stream流终结操作,Calendar时间日期类,包装类

news2024/12/25 23:54:05

Stream流

1. 单列集合的Stream流获取

Java中的Stream流操作可以分为中间操作和终止操作两种。

中间操作包括:

  • filter:对流中的元素进行筛选。
  • map:对流中的元素进行转换。
  • flatMap:对流中的元素进行扁平化映射。
  • distinct:去除流中重复的元素。
  • sorted:对流中的元素进行排序。
  • peek:对流中的每个元素执行操作,并返回新的Stream。
  • limit:截取Stream中前n个元素。
  • skip:跳过Stream中前n个元素。

终止操作包括:

  • count:统计流中元素的数量。
  • collect:将流中的元素收集为集合或其他数据结构。
  • forEach:对流中的每个元素执行操作。
  • reduce:将流中的元素进行规约操作,返回一个结果。
  • anyMatch:判断流中是否有任意一个元素满足条件。
  • allMatch:判断流中是否所有元素都满足条件。
  • noneMatch:判断流中是否所有元素都不满足条件。
  • findFirst:返回流中的第一个元素。
  • findAny:返回流中的任意一个元素。
package com.wz.stream01;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;

public class streamDemo {
    public static void main(String[] args) {
        //源
        List<Integer> numbers = Arrays.asList(1,2,3,4,5);
        //通过源获取Stream流
        Stream<Integer> stream = numbers.stream();
        //对源中的数据进行过滤
//        stream.filter(new Predicate<Integer>() {
//            @Override
//            public boolean test(Integer integer) {
//                return integer>3;
//            }
//        });
        Stream<Integer> integerStream = stream.filter(integer -> integer > 3);
        //遍历剩下的元素
//        integerStream.forEach(new Consumer<Integer>() {
//            @Override
//            public void accept(Integer integer) {
//                System.out.println(integer);
//            }
//        });
        integerStream.forEach(System.out::println);
        System.out.println("------------------");

        HashSet<Character> set = new HashSet<>();
        set.add('a');
        set.add('b');
        set.add('c');
        set.add('d');
        set.add('e');
        set.add('f');
        set.stream().filter(character -> character>'c').forEach(System.out::println);


    }
}

在代码中,首先创建了一个包含整数的列表 numbers,然后通过 numbers.stream() 获取了一个 Stream<Integer> 流。

接着,使用 filter 方法对流中的元素进行过滤。使用了 lambda 表达式来简化过滤条件的定义,只保留大于 3 的元素。

然后,使用 forEach 方法遍历过滤后的元素并打印出来。使用了方法引用 System.out::println


使用 Stream 流对字符集合进行过滤和遍历。首先创建了一个包含字符的 HashSet 集合 set,然后使用 set.stream() 获取了一个流。接着,使用 filter 方法过滤出大于字符 ‘c’ 的元素,并使用 forEach 方法遍历并打印出来。

2. 双列集合及数组的Stream流获取

双列集合无法直接获取Stream流对象,只有先拿到单列集合,然后再获取Stream流对象

Stream<Map.Entry<String, Integer>> stream =map.entrySet().stream();

Stream<String> stream = map.keySet().stream()

数组获取Stream流对象通过Arrays工具类获取

String[] names = {"ZhangSan","LiSi","WangWu"};
Stream<String> stream1 = Arrays.stream(names);

数组还可以通过Stream流自身提供的of方法来获取

Stream<String> stream2 = Stream.of("ZhangSan", "LiSi", "WangWu");
package com.wz.stream01;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Stream;

public class streamDemo02 {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();
        map.put("ZhangSan", 20);
        map.put("LiSi", 21);
        map.put("WangWu", 22);
        //双列集合无法直接获取Stream流对象,只有先拿到单列集合,然后再获取Stream流对象
//        Stream<Map.Entry<String, Integer>> stream = map.entrySet().stream();
        Stream<String> stream = map.keySet().stream()c
        //数组获取Stream流对象通过Arrays工具类获取
        String[] names = {"ZhangSan","LiSi","WangWu"};
        Stream<String> stream1 = Arrays.stream(names);
        //数组还可以通过Stream流自身提供的of方法来获取
        Stream<String> stream2 = Stream.of("ZhangSan", "LiSi", "WangWu");
        //将多个Stream流中的元素拼接到一起,形成一个新的Stream流
        Stream<String> concat = Stream.concat(stream1, stream2);

    }

}

3. 使用 Stream 流对一个用户数组进行操作。

package com.wz.stream02;

public class User {
    String username;
    String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
package com.wz.stream02;

import java.util.Arrays;
import java.util.Random;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Stream;

public class UserDemo {
    private static final char[] CHARACTERS = {
      'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'
    };
    public static void main(String[] args) {

        //初始化数组
        User[] users = new User[10];
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setUsername(randomStr(5));
            user.setPassword(randomStr(10));
            users[i]=user;
        }
//        Stream<String> stream = Arrays.stream(users).map(new Function<User, String>() {
//            @Override
//            public String apply(User user) {
//                return user.getUsername();
//            }
//        });
//        stream.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
        Arrays.stream(users).map(User::getUsername).forEach(System.out::println);


    }

    //自定义随机字符
    private static String randomStr(int length){
        StringBuilder builder = new StringBuilder();
        Random r = new Random();
        for (int i = 0 ; i<length;i++){
            int index = r.nextInt(CHARACTERS.length);
            builder.append(CHARACTERS[index]);
        }
        return builder.toString();
    }
}

使用 Stream 流对一个用户数组进行操作。

首先,代码定义了一个包含小写字母的字符数组 CHARACTERS

接下来,代码创建了一个用户数组 users,并使用循环为每个用户对象设置用户名和密码。

然后,代码展示了如何使用 Stream 流从用户数组中提取用户名并打印出来:

  1. 使用 Arrays.stream(users) 将用户数组转换为流。

  2. 使用 map 方法将流中的每个用户对象映射为其用户名。通过 Arrays.stream(users).map(User::getUsername) 将用户数组中的每个用户对象转换为其用户名。

  3. 使用 forEach 方法遍历流中的每个用户名,并使用 System.out.println 打印出来。通过 Arrays.stream(users).map(User::getUsername).forEach(System.out::println) 对流中的每个用户名执行打印操作。

最后,代码使用自定义的 randomStr 方法生成随机字符串,用于设置用户的用户名和密码。

4. Stream流中间聚合操作

Stream<T> filter(Predicate<? super T> predicate);//根据给定的条件过滤流中的元素
<R> Stream<R> map(Function<? super T, ? extends R> mapper);//将流中元素进行类型转换
Stream<T> distinct();//去重
Stream<T> sorted();//排序,如果存储元素没有实现Comparable或者相关集合没有提供Comparator将抛出异常
Stream<T> limit(long maxSize);//根据给定的上限,获取流中的元素
Stream<T> skip(long n);//跳过给定数量的元素

IntStream mapToInt(ToIntFunction<? super T> mapper);//将流中元素全部转为整数
LongStream mapToLong(ToLongFunction<? super T> mapper);//将流中元素全部转为长整数
DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper);//将流中元素全部转为双精度浮点数
package com.wz.stream03;

import java.util.Comparator;
import java.util.stream.Stream;

public class StreamOperation {
    public static void main(String[] args) {
        Stream<Integer> s = Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50);
        //distinct()可以对管道中的元素进行去重
        s.distinct().forEach(System.out::println);
        System.out.println("-------------------------");
        Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50)
                //排序,默认是升序排序,如果需要进行降序排列,需要给定一个
                //排序器进行降序排列
                .sorted()
                .forEach(System.out::println);
        System.out.println("-------------------------");
        Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50)
                .sorted((o1, o2) -> o2-o1)
                .forEach(System.out::println);
        System.out.println("-------------------------");
        Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50)
                //limit()限制管道中的元素个数
                .limit(5)
                .forEach(System.out::println);
        System.out.println("-------------------------");
        Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50)
                .skip(6)
                .forEach(System.out::println);
    }
}
  1. 使用 distinct 方法对流中的元素进行去重。通过 s.distinct().forEach(System.out::println) 去重并打印每个元素。

  2. 使用 sorted 方法对流中的元素进行排序。默认情况下,排序是升序的。通过 Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50).sorted().forEach(System.out::println) 进行升序排序并打印每个元素。

  3. 如果需要进行降序排列,可以给定一个自定义的排序器。通过 Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50).sorted((o1, o2) -> o2-o1).forEach(System.out::println) 进行降序排序并打印每个元素。

  4. 使用 limit 方法限制流中元素的个数。通过 Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50).limit(5).forEach(System.out::println) 限制流中只有前 5 个元素,并打印每个元素。

  5. 使用 skip 方法跳过流中的前几个元素。通过 Stream.of(10, 50, 64, 12, 46, 23, 41, 36,10,50).skip(6).forEach(System.out::println) 跳过前 6 个元素,并打印剩余的元素。

package com.wz.stream03;

import java.util.Arrays;
import java.util.function.ToIntFunction;
import java.util.stream.IntStream;

public class StreamOperation02 {
    public static void main(String[] args) {
        //使用Stream流进行数据类型转换
        Integer[] numbers = {1,2,3,4};
//        IntStream intStream = Arrays.stream(numbers).mapToInt(new ToIntFunction<Integer>() {
//            @Override
//            public int applyAsInt(Integer value) {
//                return value.intValue();
//            }
//        });
//        IntStream intStream = Arrays.stream(numbers).mapToInt(Integer::intValue);
//        int[] array = intStream.toArray();
        int[] array = Arrays.stream(numbers).mapToInt(Integer::intValue).toArray();
        System.out.println(Arrays.toString(array));
    }
}

如何使用 Stream 流进行数据类型转换:

首先,代码创建了一个整数数组 numbers

  1. 使用 Arrays.stream(numbers) 将整数数组转换为流。

  2. 使用 mapToInt 方法将流中的元素映射为 int 类型。通过 Arrays.stream(numbers).mapToInt(Integer::intValue) 将整数数组中的每个元素转换为对应的 int 值。

  3. 使用 toArray 方法将流中的元素转换为 int 数组。通过 Arrays.stream(numbers).mapToInt(Integer::intValue).toArray() 将流中的元素转换为 int 数组。

最后,代码使用 Arrays.toString(array) 将转换后的 int 数组转换为字符串,并输出结果。

package com.wz.stream03;

import java.util.Arrays;
import java.util.function.IntFunction;
import java.util.stream.Stream;

public class StreamOperation03 {
    public static void main(String[] args) {
        Integer[] numbers = {1, 2, 3, 4};
        int[] array = Arrays.stream(numbers).mapToInt(Integer::intValue).toArray();
        System.out.println(Arrays.toString(array));

        Stream<Integer> boxed = Arrays.stream(array).boxed();
//        boxed.toArray(new IntFunction<Integer[]>() {
//            @Override
//            public Integer[] apply(int value) {
//                return new Integer[value];
//            }
//        });
 //       boxed.toArray(value -> new Integer[value]);
        Integer[] array1 = boxed.toArray(Integer[]::new);

    }
}

利用Stream 流将整数数组转换为基本类型 int 数组:

  1. 使用 Arrays.stream(numbers) 将整数数组转换为流。
  2. 使用 mapToInt 方法将流中的元素映射为 int 类型。通过 Arrays.stream(numbers).mapToInt(Integer::intValue) 将整数数组中的每个元素转换为对应的 int 值。
  3. 使用 toArray 方法将流中的元素转换为 int 数组。通过 Arrays.stream(numbers).mapToInt(Integer::intValue).toArray() 将流中的元素转换为 int 数组。

使用 Stream 流将基本类型 int 数组转换为包装类型 Integer 数组:

  1. 使用 Arrays.stream(array) 将基本类型 int 数组转换为流。

  2. 使用 boxed 方法将流中的元素包装为对应的包装类型 Integer。通过 Arrays.stream(array).boxed() 将基本类型 int 数组中的每个元素转换为对应的包装类型 Integer

  3. 使用 toArray 方法将流中的元素转换为 Integer 数组。通过 boxed.toArray(Integer[]::new) 将流中的元素转换为 Integer 数组。

5. Stream流终结操作

void forEach(Consumer<? super T> action);//遍历操作流中元素
<A> A[] toArray(IntFunction<A[]> generator);//将流中元素按照给定的转换方式转换为数组
<R, A> R collect(Collector<? super T, A, R> collector);//将流中的元素按照给定的方式搜集起来

Optional<T> min(Comparator<? super T> comparator);//根据给定的排序方式获取流中最小元素
Optional<T> max(Comparator<? super T> comparator);//根据给定的排序方式获取流中最大元素
Optional<T> findFirst(); //获取流中第一个元素

long count();//获取流中元素数量
boolean anyMatch(Predicate<? super T> predicate);//检测流中是否存在给定条件的元素
boolean allMatch(Predicate<? super T> predicate);//检测流中元素是否全部满足给定条件
boolean noneMatch(Predicate<? super T> predicate);//检测流中元素是否全部不满足给定条件
package com.wz.stream04;

import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamTerminal {

    private static final char[] CHARACTERS = {
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
    };

    public static void main(String[] args) {

        //初始化数组
        List<User> users = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            User user = new User();
            user.setUsername(randomStr(5));
            user.setPassword(randomStr(10));
            System.out.println(user);
        }
        User user = new User();
        user.setUsername("admin");
        user.setPassword("123456");
        String username = "admin";
        users.add(user);
        System.out.println(username);
//        users.stream().map(User::getUsername).forEach(System.out::println);

        //过滤
        Stream<User> stream = users.stream().filter(u -> u.getUsername().equals(username));
        //将流中的元素按照给定的方式搜集起来,我们指定的收集方式是收集为一个List集合。
        List<User> userList = stream.collect(Collectors.toList());
        //set集合
//        Set<User> uesrSet = stream.collect(Collectors.toSet());
        //数组
//        User[] array = stream.toArray(User[]::new);
        if (userList.size() > 0) {
            System.out.println(username + "已经被注册了");
        }

        //检测流中是否存在给定条件的元素
//        users.stream().anyMatch(new Predicate<User>() {
//            @Override
//            public boolean test(User user) {
//                return user.getUsername().equals(username);
//            }
//        });
        if (users.stream().anyMatch(user1 -> user1.getUsername().equals(username))) {
            System.out.println(username + "已经被注册了");
        }
        //检测流中元素是否全部不满足给定条件
//        users.stream().noneMatch(new Predicate<User>() {
//            @Override
//            public boolean test(User user) {
//                return user.getUsername().equals(username);
//            }
//        });
        if (users.stream().noneMatch(user2 -> user2.getUsername().equals(username))) {
            System.out.println(username + "可以注册");
        }

        //检测流中元素是否全部满足给定条件
//        users.stream().allMatch(new Predicate<User>() {
//            @Override
//            public boolean test(User user) {
//                return user.getUsername().length() >=5;
//            }
//        });
        if (users.stream().allMatch(user12 -> user12.getUsername().length() >= 5)) {
            System.out.println("所有用户的用户名长度均>=5");
        }


        Integer[] numbers = {1, 2, 3, 4, 5,};
        //count()一般在filter之后才会调用
        long count = Arrays.stream(numbers).filter(num -> num > 3).count();
        System.out.println(count);

        //求最值的时候必须要给定一个比较器,因为Stream流支持的是泛型,具体是
        //什么类型需要根据使用的情况来确定,而这个类型不一定是可比较的,因此,
        //需要我们提供比较的方式。最值得到的结果存储在一个容器中,这个容器是
        //是一个比较特殊的容器,这个容器至多存储一个值(可能一个值都没有)

        //根据给定的排序方式获取流中最小元素
//        Optional<User> opt = users.stream().min(new Comparator<User>() {
//            @Override
//            public int compare(User o1, User o2) {
//                return o1.getUsername().compareTo(o2.getUsername());
//            }
//        });
        Optional<User> opt = users.stream().min((o1, o2) -> o1.getUsername().compareTo(o2.getUsername()));
        //users.stream().min(Comparator.comparing(User::getUsername));
        User u = opt.orElse(null);
        System.out.println(u);


    }

    private static String randomStr(int length) {
        StringBuilder builder = new StringBuilder();
        Random r = new Random();
        for (int i = 0; i < length; i++) {
            int index = r.nextInt(CHARACTERS.length);
            builder.append(CHARACTERS[index]);
        }
        return builder.toString();
    }
}
  1. 使用 collect 方法将流中的元素收集到一个 List<User> 集合中。通过 users.stream().filter(u -> u.getUsername().equals(username)) 过滤出用户名与指定值相等的用户流,然后使用 collect(Collectors.toList()) 将流中的元素收集为一个列表。

  2. 使用 anyMatch 方法检测流中是否存在满足给定条件的元素。通过 users.stream().anyMatch(user1 -> user1.getUsername().equals(username)) 判断是否有用户名与指定值相等的用户。

  3. 使用 noneMatch 方法检测流中是否所有元素都不满足给定条件。通过 users.stream().noneMatch(user2 -> user2.getUsername().equals(username)) 判断是否所有用户名都与指定值不相等。

  4. 使用 allMatch 方法检测流中是否所有元素都满足给定条件。通过 users.stream().allMatch(user12 -> user12.getUsername().length() >= 5) 判断是否所有用户名长度都大于等于 5。

  5. 使用 count 方法统计流中满足给定条件的元素个数。通过 Arrays.stream(numbers).filter(num -> num > 3).count() 统计数组中大于 3 的元素个数。

  6. 使用 min 方法获取流中的最小元素。通过 users.stream().min((o1, o2) -> o1.getUsername().compareTo(o2.getUsername())) 获取用户名最小的用户对象。注意,这里使用了 lambda 表达式作为比较器。

日期时间类

1. 日期时间类使用

//获取系统的当前时间
        Date date = new Date();
        System.out.println(date);
//日历,获取一个日期的实例,这个实例一产生就是当前系统的时间
        Calendar c = Calendar.getInstance();
//获取日历的当前日期
        Date time = c.getTime();
        System.out.println(time);
//获取日历的年份
        int year = c.get(Calendar.YEAR);
        System.out.println(year);
//获取日历的月份和当前天数
//注意,月份从0开始,11结束
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DATE);
        System.out.println(year + "-" +(month+1) + "-" + day);
//获取时间
//注意:HOUR表示12小时制  HOUR_OF_DAY表示24小时制
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
        int second = c.get(Calendar.SECOND);
        System.out.println(hour+":"+minute+":"+second);

//滚动日历,第一个参数表示滚动单位,第二个参数表示滚动数量
        c.roll(Calendar.DATE,-5);
        System.out.println(c.getTime());
//获取当前月的最大天数  
		int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println(maxDay);
//设置日期目前处于的天数
        c.set(Calendar.DAY_OF_MONTH,2);
//获取当前日历表示一周的星期几
        int week = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(week);

2. 日历

package com.wz.date01;

import java.util.ArrayList;
import java.util.Calendar;

public class DateDemo {
    public static void main(String[] args) {
        showCalender(2023,7);
    }
    public static void showCalender(int year , int month){
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        //获取当前时间和日期的实例
        Calendar c = Calendar.getInstance();
        //传入年份和月份
        c.set(Calendar.YEAR,year);
        c.set(Calendar.MONTH,month-1);
        //得到这个月最大天数
        int maxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        //将日历设置到当月的第一天
        c.set(Calendar.DAY_OF_MONTH,1);
        //得到这个月的第一天是星期几
        //注意:一周的第一天是星期日 -- 1 ,最后一天是星期六 -- 7
        int week = c.get(Calendar.DAY_OF_WEEK);
        //一页日历是42天
        int total = 42;
        //计算上个月要展示多少天
        int lastMonthDays = (week == 1) ? 6: ( week - 2 );
        //计算上个月的最大天数
        //将日历向前滚动一个月
        c.roll(Calendar.MONTH,-1);
    //    c.set(Calendar.DAY_OF_MONTH,1);
        int lastMonthMaxDays = c.getActualMaximum(Calendar.DAY_OF_MONTH);
        //上个月开始的天数
        int start = lastMonthMaxDays - lastMonthDays + 1;
        ArrayList<Integer> days= new ArrayList<>();
        //向days中添加上个月要展示的天数
        for (int i = start; i <= lastMonthMaxDays; i++) {
            days.add(i);
        }
        //向days中添加当月的天数
        for (int i = 1; i <= maxDays; i++) {
            days.add(i);
        }
        //向days中添加下个月需要展示的天数
        int nextMonthDays = total - maxDays - lastMonthDays;
        for (int i = 1; i <=nextMonthDays ; i++) {
            days.add(i);
        }

        //展示日历
        for (int i = 0; i < days.size(); i++) {
            System.out.print(days.get(i)+"\t");
            if (i%7==6){
                System.out.println();
            }
        }
    }
}

请添加图片描述

  1. 创建一个Calendar实例,获取当前时间和日期。
  2. 设置Calendar实例的年份和月份为传入的参数。
  3. 使用getActualMaximum(Calendar.DAY_OF_MONTH)方法获取该月份的最大天数。
  4. 使用set(Calendar.DAY_OF_MONTH, 1)将日历设置到该月份的第一天。
  5. 使用get(Calendar.DAY_OF_WEEK)获取该月份的第一天是星期几。
  6. 计算上个月需要展示的天数,以及上个月的最大天数。
  7. 向一个ArrayList中添加上个月需要展示的天数。
  8. 向ArrayList中添加该月份的天数。
  9. 向ArrayList中添加下个月需要展示的天数。
  10. 使用循环遍历ArrayList,按照每行7个元素的格式打印日历。

包装类

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。基本类型的数据不具备"对象"的特性(没有成员变量和成员方法可以调用),因此,java为每种数据类型分别设计了对应的类,即包装类。

基本数据类型对应的包装类
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean
  1. 所有包装类都是final类型,因此不能创建他们的子类。
  2. 包装类是不可变类,一个包装类的对象自创建后,他所包含的基本类型数据就不能被改变。

1. 装箱和拆箱

装箱:将基本数据类型变为包装类对象。
拆箱:将包装类中包装的基本数据类型取出。

int --> Integer(装箱)Integer --> int(拆箱)
使用Integer类的构造方法xxx.intValue()
Integer.valueOf()自动拆箱
自动装箱
Integer a = 100; //Integer.valueOf()
        int b = 100;
        //如果有字面的基本数据类型参数比较运算,只需要
        //看值是否相同即可
        System.out.println(a == b);
Integer c  = 200, d = 200;
        Integer e  = 110, f = 110;
        System.out.println(c == d);
        System.out.println(e == f);

        //这一步发生了自动拆箱,自动拆箱调用的是xxxValue方法
        //a.intValue()
package com.wz.packagGroup;

public class Test01 {
    public static void main(String[] args) {

        Integer c  = 200, d = 200;
        Integer e  = 110, f = 110;
        System.out.println(c == d);//false
        System.out.println(e == f);//true

        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1 == i2);//false
        System.out.println(i1.equals(i2));//true

        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4);//false
        System.out.println(i3.equals(i4));//true

        Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6);//false
        System.out.println(i5.equals(i6));//true

        Integer i7 = 127;
        Integer i8 = 127;
        System.out.println(i7 == i8);//true
        System.out.println(i7.equals(i8));//true
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/749276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重启Oracle数据库

root 用户登录服务器。 1、 以oracle身份登录数据库&#xff0c;命令&#xff1a;su - oracle 2、 进入Sqlplus控制台&#xff0c;命令&#xff1a;sqlplus /nolog 3、 以系统管理员登录&#xff0c;命令&#xff1a;connect / as sysdba可以合并为&#xff1a;sqlplus sys/密码…

Acwing:第 111 场周赛(2023.7.12 C++)

目录 5047. 1序列 题目描述&#xff1a; 实现代码&#xff1a; 5048. 无线网络 题目描述&#xff1a; 实现代码&#xff1a; 二分 贪心 5049. 选人 题目描述&#xff1a; 实现代码&#xff1a; 数学 5047. 1序列 题目描述&#xff1a; 实现代码&#xff1a; #incl…

如何实现浏览器内多个标签页之间的通信?

1、使用 LocalStorage 特点&#xff1a;同域共享存储空间&#xff1b;持久化将数据存储在浏览器&#xff1b;提供事件监听storage变化 实现逻辑&#xff1a; A页面将数据存储在本地。B页面监听storage的变化&#xff0c;同步storage的最新数据&#xff1b; 好处&#xff1a;操…

绘制数据图

读取文件&#xff1a; ( 1960 : 30 64 6 ) (1970 : 24 69 7 ) (1980 : 23 68 9 ) (1990 : 18 70 12) (2000 : 15 68 17 ) (2010 : 13 64 23 ) (2020 : 12 60 28) ( 2030 : 11 59 30 ) ( 2040 : 11 56 33 ) 运行代码&#xff1a; //绘制数据图 #include"std_lib_facil…

2.字体图标

2.1字体图标的产生 字体图标使用场景:主要用于显示网页中通用、常用的一些小图标。 精灵图是有诸多优点的&#xff0c;但是缺点很明显&#xff1a; 1.图片文件比较大 2.图片本身放大和缩小会失真 3.一旦图片制作完毕想要更换非常复杂 字体图标iconfont可以很好的解决以上问题…

Redis特性初识及其安装与配置

目录 1.认识Redis Redis主要特点 主要应用场景 2.MySQL VS NoSQL 3.Redis的安装与配置 redis5的安装 修改配置文件 启动redis 4.Redis客户端 命令行客户端 图形化界面客户端 基于redis的API自行开发客户端 1.认识Redis Redis&#xff08;Remote Dictionary Serve…

Python-Web框架flask使用

目录 1.Web框架 1.1 flask 1.1.1 debug调试 1.1.2 定义参数web服务 获取字符串 ​编辑 1.1.3 html网页渲染 1.13.1 带参数传给网页文件 普通元素 列表元素 字典元素 1.Web框架 1.1 flask python的web框架&#xff0c;目录结构如下&#xff1a; 1.static存放的是css,…

《Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.3》

一、环境信息 操作系统&#xff1a;Centos7.6.1810 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 如下图所示&#xff1a; 注意&#xff1a;升级后由于加密算法的区别&#xff0c;低版本的SSH工具可能无法连接&#xff0c;建议改用Xshell7或SecureCRT9.0以上版本。 二、注意事项 1、 …

2023最新版 Navicat 16.2.3安装和试用教程详解:轻松掌握最新版本的数据库管理工具连接Redis

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

kettle开发-Day40-AI分流之case/switch

前言&#xff1a; 前面我们讲到了很多关于数据流的AI方面的介绍&#xff0c;包括自定义组件和算力提升这块的&#xff0c;今天我们来学习一个关于kettle数据分流处理非常重要的组件Switch / Case 。当我们的数据来源于类似日志、csv文件等半结构化数据时&#xff0c;我们需要在…

计算机网络 day6

目录 arp协议 arp病毒\欺骗 arp病毒的运行原理 arp病毒产生的后果&#xff1a; 解决方法&#xff1a; ICMP协议 ICMP用在哪里&#xff1f; ICMP协议数据的封装过程 ​编辑 为什么icmp协议封装好数据后&#xff0c;还要加一个ip包头&#xff0c;再使用ip协议再次进…

【UE4 C++】08-生成抛射物来模拟攻击效果

步骤 新建一个C类&#xff0c;父类为Actor&#xff0c;命名为“ASMagicProjectile” 在“ASMagicProjectile.h”中添加如下代码&#xff1a; 在“ASMagicProjectile.cpp”中添加如下代码&#xff1a; 编译后在虚幻编辑器中新建一个蓝图&#xff0c;选择父类为我们刚创建的C类…

vscode插件开发之终端那些事儿

在开发vscode插件的时候&#xff0c;好几个设计都需要集成终端。 查资料后发现vsocd为开发者提供了丰富的终端API。 结合我自己的需求来展开终端的那些事儿吧&#xff1a; 从treeview中点击触发打开一个终端 无关的代码省略&#xff1a; vscode.window.createTerminal({name…

python+selenium进行cnblog的自动化登录测试

Web登录测试是很常见的测试&#xff0c;手动测试大家再熟悉不过了&#xff0c;那如何进行自动化登录测试呢&#xff01;本文就基于pythonselenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化登录测试&#xff0c;可提供点参考&#xff01;下面就包括测试代…

有没有好的PC端和移动端都能用的便签app?

生活在快节奏的社会环境中&#xff0c;我们每天都要面对大量的事务。为了更好地管理任务和时间&#xff0c;便签app成为了越来越多人选择的工具。因为&#xff0c;便签app不仅能帮助我们记录并安排日常事务&#xff0c;还可以设置提醒事项&#xff0c;准时发送提醒通知告诉我们…

数学建模——插值算法

概念&#xff1a;数模比赛中&#xff0c;常常需要根据有已知的函数点进行数、模型处理和分析&#xff0c;而有时候现有的数据是极少的&#xff0c;不足以支撑分析的进行&#xff0c;这时就需要使用一些数学的方法&#xff0c;“模拟产生“一些新的但又比较靠谱的值来满足需求&a…

为什么很多人说不建议学JAVA,说很难找到工作?

前言 在回答这个问题之前&#xff0c;我曾经也看到了类似的其他语言相关的问题&#xff1a; 那么现在问题来了&#xff0c;什么语言都不建议学&#xff0c;那什么是可以学的呢&#xff1f;看多了所谓的不建议学习的文章和回答固然可以了解到该语言的些许缺点和当前环境下的一些…

NTLM协议

0x01 LM Hash加密算法 LM Hash本质是一个DES加密&#xff0c;从Windows Vista和Windows Server 2008开始就禁用了LM Hash。LM Hash明文密码被限定在14位以内&#xff0c;密码超过14位则会停止使用LM Hash。下面介绍一下LM Hash的加密流程&#xff0c;以Pss1234为例&#xff1a…

Element-Plus搭建CMS页面结构 引入第三方图标库iconfont(详细)

Element-Plus组件库使用 element plus组件库是由饿了么前端团队专门针对vue框架开发的组件库&#xff0c;专门用于电脑端网页的。因为里面集成了很多组件&#xff0c;所以使用他可以非常快速的帮我们实现网站的开发。 安装&#xff1a; npm install element-plus --save 引入…

制作Visual Studio离线安装包

vs2015之后官网就不提供离线安装包了&#xff0c;使用离线安装包就需要自己手动制作一个&#xff1b; 以vs2019为例&#xff1a; 先去官网下载在线安装器 官网下载地址&#xff1a;Visual Studio 较旧的下载 - 2019、2017、2015 和以前的版本 (microsoft.com) 展开2019的标签…