Rumah > Java > javaTutorial > teks badan

API DateTime Java Boleh Berubah & Tidak Boleh Berubah

WBOY
Lepaskan: 2024-08-21 22:38:02
asal
457 orang telah melayarinya

Mutable & Immutable Java DateTime API

Kelas DateTime boleh ubah

Dalam pakej java.util, banyak kelas boleh berubah, bermakna keadaan dalaman mereka boleh berubah selepas penciptaan. Jika berbilang rangkaian berkongsi kejadian yang sama, perubahan yang dibuat dalam satu utas secara tidak dijangka boleh memberi kesan kepada yang lain, yang membawa kepada pepijat. Masalah ini mendorong penciptaan kelas tidak berubah dalam pakej java.time yang diperkenalkan dalam Java 8.

import java.util.Date;

public class MutableDateExample {
    public static void main(String[] args) {
        Date sharedDate = new Date(); // Initial date

        Runnable task1 = () -> {
            sharedDate.setYear(2025 - 1900); // Mutate the date (Deprecated method)
            System.out.println("Task 1: " + sharedDate);
        };

        Runnable task2 = () -> {
            sharedDate.setMonth(5); // Mutate the month
            System.out.println("Task 2: " + sharedDate);
        };

        new Thread(task1).start();
        new Thread(task2).start();
    }
}
Salin selepas log masuk

Isu dengan Kelas Tarikh/Masa Boleh Berubah

Isu Concurrency: Dalam contoh di atas, kedua-dua tugas mengubah suai objek sharedDate secara serentak. Ini boleh membawa kepada hasil yang tidak dapat diramalkan kerana Tarikh boleh berubah dan tidak selamat untuk benang.

Integriti Data: Pengubahsuaian dalam satu bahagian kod secara tidak dijangka boleh menjejaskan bahagian lain yang objek tarikh yang sama digunakan, yang membawa kepada data atau ralat logik yang salah.

Kelas boleh ubah: java.util.Date, java.util.Calendar, java.util.GregorianCalendar, java.text.SimpleDateFormat, java.util.TimeZone, java.util.Locale

DateTime yang tidak boleh diubah

Pakej java.time (Diperkenalkan dalam Java 8)

API java.time direka bentuk untuk selamat dan tidak boleh diubah. Kelasnya tidak boleh diubah, bermakna sebaik sahaja anda mencipta objek, ia tidak boleh diubah. Untuk mengemas kini tarikh atau masa, anda membuat objek baharu dengan nilai yang dikemas kini dan bukannya menukar yang asal.

  • Kelas Utama
    • LocalDate, LocalTime, LocalDateTime: Mewakili tarikh dan masa tanpa maklumat zon waktu.
    • ZonedDateTime, OffsetDateTime, OffsetTime: Mewakili tarikh dan masa dengan zon masa atau maklumat offset.
    • Segera: Mewakili detik tertentu dalam masa (UTC).
    • Tempoh, Tempoh: Mewakili amaun masa berdasarkan masa dan tarikh.
LocalDate initialDate = LocalDate.of(2024, 8, 21); // Initial date

        // Create a new date by adding 5 days
        LocalDate updatedDate = initialDate.plusDays(5);

        // Print the initial and updated dates
        System.out.println("Initial Date: " + initialDate);
        System.out.println("Updated Date: " + updatedDate);

        // Print the memory addresses of the initial and updated dates
        System.out.println("Initial Date Address: " + System.identityHashCode(initialDate));
        System.out.println("Updated Date Address: " + System.identityHashCode(updatedDate));

// example output
// Initial Date: 2024-08-21
// Updated Date: 2024-08-26
// Initial Date Address: 1555845260
// Updated Date Address: 1590550415
Salin selepas log masuk

Ringkasan:

  • Kelas Boleh Diubah (java.util.Date, java.util.Calendar): Terdedah kepada isu seperti masalah serentak, kesan sampingan yang tidak diingini dan pepijat sejarah. Hanya sesuai untuk kod warisan atau senario tertentu yang tidak membimbangkan kebolehubahan.
  • Kelas Tidak Boleh Ubah (java.time): Menyediakan keselamatan benang, gelagat boleh diramal dan reka bentuk yang lebih baik secara keseluruhan. Ia harus diutamakan untuk pangkalan kod baharu dan apabila bekerja dengan aplikasi Java moden.

Atas ialah kandungan terperinci API DateTime Java Boleh Berubah & Tidak Boleh Berubah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!