Xu Hướng 10/2023 # So Sánh Csharp Và Java # Top 17 Xem Nhiều | Channuoithuy.edu.vn

Xu Hướng 10/2023 # So Sánh Csharp Và Java # Top 17 Xem Nhiều

Bạn đang xem bài viết So Sánh Csharp Và Java được cập nhật mới nhất tháng 10 năm 2023 trên website Channuoithuy.edu.vn. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất.

So sánh điểm khác nhau giữa ngôn ngữ lập trình C# và ngôn ngữ lập trình Java

Ngôn ngữ lập trình Csharp hay còn gọi là C# và ngôn ngữ lập trình Java là hai ngôn ngữ lập trình rất nổi tiếng và được nhiều người biết đến. Thế nhưng không phải ai cũng có thể hiểu được giữa hai ngôn ngữ lập trình này có cái gì khác nhau. 

Ngôn ngữ lập trình Java và C# khác nhau về các kiểu dữ liệu

Trong ngôn ngữ lập trình Java thì các Primitive Datatype vi phạm nghiêm trọng việc thuần hướng đối tượng. Do nó không kế thừa từ lớp Object như trong tất cả các đối tượng khác nên việc xử lý sẽ phức tạp.Trong khi đó thì ngôn ngữ lập trình C# với các kiểu int là bí danh của Int32 nên không xảy ra trường hợp trên.

C# và Java khác nhau về mặt khai báo

Nhìn chung thì về mặt khai báo cả hai ngôn ngữ lập trình C# và Java khá tương đồng nhau, tuy vậy cũng có chút khác biệt, trong Java statcic = const, còn trong C# là read only. Các hằng số trước khi gọi sẽ được biên dịch cho nên sẽ xuất ra nhanh chóng hơn.

Ngôn ngữ lập trình Java và C# khác nhau về các trúc điều khiển

Về cấu trúc điều khiển thì cả hai ngôn ngữ lập trình đều sử dụng đầy đủ các lệnh if/then/else và switch. Dẫu vậy cũng có một sự khác biệt nhỏ đó là trong Java thì mỗi câu lệnh thực hiện trong các case khác nhau không cần break, trong khi đó đối với ngôn ngữ lập trình C# thì đó là điều bắt buột hoàn toàn.

Điểm khác biệt tiếp theo chính là các vòng lặp

(còn tiếp…)

So Sánh Về Java Và Kotlin ?

Kotlin là ngôn ngữ lập trình được phát triển bởi JetBrains. Nó xuất hiện lần đầu năm 2011 khi JetBrains công bố dự án của họ mạng tên “Kotlin”. Đây là một ngôn ngữ mã nguồn mở

Về cơ bản, cũng như Java, C hay C++ , Kotlin cũng là “ngôn ngữ lập trình kiểu tĩnh”. Nghĩa là các biến không cần phải định nghĩa trươc khi sử dụng. Kiểu tĩnh thực hiện việc kê khai nghiêm ngặt hoặc khởi tạo các biến trước khi chúng được sử dụng

Kiểu tĩnh không có nghĩa chúng ta phải khai báo tất cả các biến lúc đầu trước khi sử dụng chúng. Các biến có thể được khởi tạo bất cứ nơi nào trong chương trình và chúng ta có thể sử dụng chúng bất cứ nơi nào khi cần Ví dụ.

Java là một ngôn ngữ lập trình hướng đối tượng, đa mục đích có khả năng làm việc trong hầu như bất kỳ nền tảng nào mà không cần phải biên dịch lại. code Java sẽ làm việc “lý tưởng” trên bất kỳ thiết bị chạy hệ điều hành nào, miễn là nó đã được cài đặt Java Runtime Environment (JRE). Chỉ cần tưởng tượng bạn phải viết một phiên bản của một ứng dụng cho tất cả các loại thiết bị, hệ điều hành hiện có trên thị trường.

/* Java Code */ static int num1, num2;

Ngoài class và method của lập trình hướng đối tượng, Kotlin cũng hỗ trợ lập trình thủ tục với việc sử dụng hàm.

Giống như Java, C and C++, điểm mấu chốt của chương trình Kotlin là hàm “main”. Nó thông qua một mảng chứa bất kỳ đối số của command line nào. Ví dụ

Phần đuôi file của Java là .java, .class, .jar thì phần đuôi file của Kotlin là .kt và .kts.

ngày 17/5 vừa qua, tại Google I/O keynote, Android team đã thông báo Kotlin sẽ trở thành ngôn ngữ chính thức của Android

Điểm mạnh của Kotlin

Kotlin biên dịch thành JVM bytecode hoặc JavaScript - Giống như Java, Bytecode cũng là format biên dịch cho Kotlin. Bytecode nghĩa là một khi đã biên dịch, các đoạn code sẽ chạy thông qua một máy ảo thay vì một bộ xử lý. Bằng cách này, code có thể chạy trên bất kỳ nền tảng nào, khi nó được biên dịch và chạy thông qua máy ảo. Khi Kotlin được chuyển đổi thành bytecode, nó có thể truyền được qua mạng và thực hiện bởi JVM

Kotlin có thể sử dụng tất cả các nền tảng và thư viện Java hiện có - Bất kể là nền tảng cao cấp dựa trên xử lý annotation. Điều quan trọng là Kotlin dễ dàng tích hợp với Maven, Gradle hay các hệ thống build khác.

Kotlin dễ học và dễ tiếp cận. Có thể học dễ dàng bằng những ví dụ tham khảo đơn giản. Cú pháp đơn giản và trực quan. Kotlin khá giống Scala nhưng dễ hiểu hơn

Kotlin là mã nguồn mở nên không tốn kém gì để có thể sử dụng

Chuyển đổi tự động Java thành Kotlin - JetBrains tích hợp chức năng mới vào IntelliJ để chuyển đổi Java thành Kotlin và điều này tiết kiệm một lượng thời gian rất lớn. Nó cũng giúp chúng ta không phải code lại kiểu tay to

Null-safety của Kotlin: giúp chúng ta thoát khỏi NullPointerExceptions. Giúp chúng ta tránh những exeption kiểu con trỏ null. Trong Kotlin, hệ thống sẽ từ chối biên dịch đoạn code đang gán hay trả về giá trị null

Review code không còn là vấn đề - Kotlin tập trung nhiều hơn vào việc cú pháp dễ hiểu, dễ đọc để review, chúng có thể hoàn thành bởi những thành viên team chưa quen với ngôn ngữ này

Khác biệt giữa Kotlin và Java

Null safety - như đã nói ở trên, Kotlin tránh NullPointerException. Kotlin dừng lại ở bất cứ thời điểm biên dich nào khi NullPointerException xuất hiện

Data Classes - trong Kotlin có Data Classes để tự phát sinh boilerplate như equals, hashCode, toString, getters/setters v.v . Ví dụ

/* Java Code */ class Book { private String title; private Author author; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Author getAuthor() { return author; } public void setAuthor(Author author) { this.author = author; } }

Nhưng ở Kotlin class tương tự như trên chỉ cần định nghĩa bởi 1 dòng code

/* kotlin Code */ data class Book(var title:String,var author:Author) Nó cũng giúp chúng ta dễ dàng copy data classes với việc sử dung copy() val book = Book("Kotlin", "JetBrains") val copy = book.copy() *Các chức năng mở rộng *- Kotlin cho phép chúng ta có thể mở rộng các chức năng của các class hiện có mà không kế thừa từ chúng. Nghĩa là Kotlin cung cấp khả năng mở rộng class với chức năng mới mà không cần kế thừa. Nó được thực hiện bởi chức năng mở rộng. Để khai báo, chúng ta cần đặt tên nó với một receiver type, như một loại được mở rộng. Ví dụ fun MutableList.swap(index1:Int,index2:Int){ val tmp=this[index1] this[index1]=this[index2] this[index2]=tmp }

từ khóa "this" trong chức năng mở rộng tương ứng với 1 đối tượng nhận, được truyền trước dấu chấm. Giờ chúng ta có thể gọi như 1 hàm trong bất kỳ MutableList nào

val abc = mutableListOf(1, 2, 3) abc.swap(0, 2) Smart Casts - Khi nói đến các phôi, trình biên dịch Kotlin thực sự thông minh. Trong nhiều trường hợp, người ta không cần sử dụng các toán tử cast rõ ràng trong kotlin, nhưng trong Kotlin có "is-checks" cho các giá trị không thay đổi và chèn các phôi tự động khi cần thiết fun demo(x:Any){ if(x is String){ print(x.length)

Type Inference - Trong Kotlin, có một điều tuyệt vời là bạn không phải chỉ rõ loại của mỗi biến một cách rõ ràng (theo cách rõ ràng và chi tiết). Nhưng nếu bạn muốn xác định một loại dữ liệu một cách rõ ràng, bạn cũng có thể làm điều đó. Ví dụ:

/* not explicitly defined */ fun main(args: Array) { val text = 10 println(text) } /* explicitly defined */ fun main(args: Array) { val text: Int = 10 println(text) }

Lập trình hướng chức năng - Điều quan trọng nhất là Kotlin là một ngôn ngữ lập trình hướng chức năng. Về cơ bản Kotlin bao gồm nhiều method hữu ích, bao gồm các chức năng bậc cao, biểu thức lambda, operator overloading, lazy evaluation, vận hành quá tải và nhiều hơn nữa.

Lập trình hướng chức năng làm cho Kotlin dễ xử lý hơn nữa khi tập hợp chúng lại :

Tốc độ biên dịch (giữa Java và Kotlin)

Clean build (build codebase lần đầu)

Khi chúng ta biên dịch mã Kotlin lần đầu tiên, thì phải mất nhiều thời gian hơn Java. Java biên dịch nhanh hơn 15-20% so với Kotlin.

Incremental Builds

Nhưng như chúng ta biết, hầu hết thời gian chúng ta cần incremental builds như thay đổi một đoạn code có sẵn và build lại chúng, và deploy không ngừng.

Theo quan điểm này, Kotlin mất thời gian biên dịch như Java, thâm chí còn nhanh hơn 1 chút

Tương lai của ngôn ngữ Kotlin

Kotlin liên kết với Java và cung cấp sự thay đổi không ngừng của mã và hệ thống cấp cao sang Java và cung cấp cách Migration dễ dàng từ Java với khả năng tương thích ngược.

Với các tính năng như nhiều khai báo hơn, ít mã, cơ sở dữ liệu ngôn ngữ hỗn hợp và diễn cảm hơn Java, Kotlin sẽ là tương lai cho các ứng dụng doanh nghiệp và di động thời gian tới.

So Sánh Và Sắp Xếp Trong Java

1- Kiểu nguyên thủy và kiểu tham chiếu trong Java.

Trước hết chúng ta cần phân biệt kiểu nguyên thủy (Primitive type) và kiểu tham chiếu (reference type) trong java.

Trong Java chúng ta có 8 kiểu nguyên thủy.

Tất cả các kiểu khác đều mở rộng từ Object, chúng là các kiểu tham chiếu.

2- Kiểu nguyên thủy lưu trữ thế nào trên bộ nhớ

Trước hết bạn phải hiểu rằng, Java không đảm bảo rằng mỗi biến sẽ tương ứng với một vị trí trên bộ nhớ. chẳng hạn Java sẽ tối ưu theo cách biến ‘i’ sẽ được lưu trữ trên bộ đăng ký (register), hoặc thậm trí không được lưu trữ ở đâu cả, nếu trình biên dịch nhận thấy rằng bạn không bao giờ sử dụng giá trị của nó, hoặc nó có thể được dõi theo thông qua code và sử dụng các giá trị phù hợp một cách trực tiếp.

int a = 100; a = 200; int b = a;

Khi đó Java thực hiện các thao tác sau:

3- Kiểu tham chiếu lưu trữ thế nào trên bộ nhớ

Khi bạn sử dụng toán tử new (Ví dụ new Object()), Java sẽ tạo ra một thực thể mới trên bộ nhớ. Bạn khai báo một biến và khởi tạo giá trị của nó thông qua toán tử new, chẳng hạn Object a = new Object(); Java sẽ tạo ra một thực thể mới trong bộ nhớ, và một tham chiếu ‘a’ trỏ tới vị trí bộ nhớ của thực thể vừa được tạo ra.

Khi bạn khai báo một biến b Object b = a; không có thực thể nào được tạo ra trong bộ nhớ, Java chỉ tạo ra một tham chiếu ‘b’, trỏ tới vị cùng vị trí mà ‘a’ đang trỏ tới.

Object a = new Object(); a = new String("Text"); Object b = a;

Trong Java có 2 kiểu so sánh:

Sử dụng toán tử ==

Sử dụng phương thức (method) equals(..)

Toán tử == dùng so sánh các kiểu nguyên thủy và các kiểu tham chiếu. Toán tử equals(..) là một phương thức chỉ dùng cho các kiểu tham chiếu.

5- So sánh các kiểu nguyên thủy

Với kiểu nguyên thủy chúng ta chỉ có duy nhất một cách so sánh bằng toán tử ==, các kiểu nguyên thủy so sánh với nhau thông qua giá trị của chúng.

int a = 200; int b = 200; boolean c = (a == b); 6.1- Sử dụng toán tử == so sánh các kiểu tham chiếu

Khi bạn so sánh 2 đối tượng tham chiếu theo toán tử ==, có nghĩa là so sánh vị trí mà 2 đối tượng tham chiếu này trỏ tới. Về bản chất là kiểm tra xem 2 tham chiếu đó có cùng trỏ tới một thực thể trên bộ nhớ hay không.

package org.o7planning.tutorial.comparation; public class ReferenceEeDemo { public static void main(String[] args) { String str1 = "String 1"; String str2 = new String("String 1"); String s1 = new String("This is text"); String s2 = new String("This is text"); boolean e1 = (s1 == s2); System.out.println("s1 == s2 ? " + e1); Object obj = s1; boolean e2 = (obj == s1); System.out.println("obj == s1 ? " + e2); } }

Kết quả chạy chương trình

6.2- Sử dụng equals(..) so sánh các kiểu tham chiếu

StringComparationDemo.java

package org.o7planning.tutorial.comparation; public class StringComparationDemo { public static void main(String[] args) { String s1 = new String("This is text"); String s2 = new String("This is text"); boolean e1 = s1.equals(s2); System.out.println("first comparation: s1 equals s2 ? " + e1); s2 = new String("New s2 text"); boolean e2 = s1.equals(s2); System.out.println("second comparation: s1 equals s2 ? " + e2); } }

Kết quả chạy chương trình:

6.3- Ghi đè phương thức equals(Object)

Phương thức equals(Object) là phương thức có sẵn của class Object, mọi class con đều được thừa kế method này. Trong một số tình huống bạn có thể ghi đè method này tại class con.

package org.o7planning.tutorial.comparation.equals; public class NumberOfMedals { private int goldCount; private int silverCount; private int bronzeCount; public NumberOfMedals(int goldCount, int silverCount, int bronzeCount) { this.goldCount = goldCount; this.silverCount = silverCount; this.bronzeCount = bronzeCount; } public int getGoldCount() { return goldCount; } public int getSilverCount() { return silverCount; } public int getBronzeCount() { return bronzeCount; } @Override public boolean equals(Object other) { if (other == null) { return false; } if (!(other instanceof NumberOfMedals)) { return false; } NumberOfMedals otherNoM = (NumberOfMedals) other; if (this.goldCount == otherNoM.goldCount && this.silverCount == otherNoM.silverCount && this.bronzeCount == otherNoM.bronzeCount) { return true; } return false; } }

NumberOfMedalsComparationDemo.java

package org.o7planning.tutorial.comparation.equals; public class NumberOfMedalsComparationDemo { public static void main(String[] args) { NumberOfMedals american = new NumberOfMedals(40, 15, 15); NumberOfMedals japan = new NumberOfMedals(10, 5, 20); NumberOfMedals korea = new NumberOfMedals(10, 5, 20); System.out.println("Medals of American equals Japan ? " + american.equals(japan)); System.out.println("Medals of Korea equals Japan ? " + korea.equals(japan)); } } 7- Ví dụ sắp xếp một mảng String

String vốn là một class mà các đối tượng của nó có thể so sánh với nhau, theo quy tắc chữ cái. Ví dụ sau đây minh họa cách sắp xếp một mảng String sử dụng các phương thức tiện ích có sẵn trong Java.

StringArraySortingDemo.java

package org.o7planning.tutorial.sorting; import java.util.Arrays; public class StringArraySortingDemo { public static void main(String[] args) { String[] fruits = new String[] { "Pineapple", "Apple", "Orange", "Banana" }; Arrays.sort(fruits); for (int i = 0; i < fruits.length; i++) { System.out.println("fruits " + i + " : " + fruits[i]); } } } public class Actor { private String firstName; private String lastName; } package org.o7planning.tutorial.sorting; private String firstName; private String lastName; public Actor(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } @Override public int compareTo(Actor other) { int value = this.lastName.compareTo(other.lastName); if (value != 0) { return value; } value = this.firstName.compareTo(other.firstName); return value; } } package org.o7planning.tutorial.sorting; public class ActorSortingDemo { public static void main(String[] args) { Actor actor1 = new Actor("Mischa", "Barton"); Actor actor2 = new Actor("Christian", "Bale"); Actor actor3 = new Actor("Joan", "Collins"); Actor actor4 = new Actor("Gemma", "Arterton"); Actor actor5 = new Actor("Daniel", "Craig"); Actor[] actors = new Actor[] { actor1, actor2, actor3, actor4, actor5 }; for (int i = 0; i < actors.length; i++) { for (int j = i + 1; j < actors.length; j++) { if (actors[j].compareTo(actors[i]) < 0) { Actor temp = actors[j]; actors[j] = actors[i]; actors[i] = temp; } } } for (int i = 0; i < actors.length; i++) { System.out.println(actors[i].getFirstName() + " " + actors[i].getLastName()); } } }

Sử dụng Arrays.sort(Object[]) để sắp xếp ví dụ trên:

package org.o7planning.tutorial.sorting; import java.util.Arrays; public class ActorSortingDemo2 { public static void main(String[] args) { Actor actor1 = new Actor("Mischa", "Barton"); Actor actor2 = new Actor("Christian", "Bale"); Actor actor3 = new Actor("Joan", "Collins"); Actor actor4 = new Actor("Gemma", "Arterton"); Actor actor5 = new Actor("Daniel", "Craig"); Actor[] actors = new Actor[] { actor1, actor2, actor3, actor4, actor5 }; Arrays.sort(actors); for (int i = 0; i < actors.length; i++) { System.out.println(actors[i].getFirstName() + " " + actors[i].getLastName()); } } } package org.o7planning.tutorial.sorting; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ListSortingDemo { public static void main(String[] args) { Actor actor1 = new Actor("Mischa", "Barton"); Actor actor2 = new Actor("Christian", "Bale"); Actor actor3 = new Actor("Joan", "Collins"); Actor actor4 = new Actor("Gemma", "Arterton"); Actor actor5 = new Actor("Daniel", "Craig"); actors.add(actor1); actors.add(actor2); actors.add(actor3); actors.add(actor4); actors.add(actor5); Collections.sort(actors); for (Actor actor : actors) { System.out.println(actor.getFirstName() + " " + actor.getLastName()); } } } 10- Sắp xếp sử dụng bộ so sánh (Comparator)

Các ví dụ trên chúng ta sắp xếp một mảng hoặc một danh sách. Bản thân các phần tử của nó có khả năng so sánh với nhau (Do thi hành interface Comparable). Câu hỏi đặt ra với các đối tượng mà class của nó không thi hành interface Comparable, thì có thể sắp xếp được không. Trong trường hợp này bạn cần cung cấp 1 bộ so sánh (Comparator) nó là quy tắc để sắp xếp các đối tượng kia.

package org.o7planning.tutorial.comparator; public class Person { private int age; private String fullName; public Person(String fullName, int age) { this.fullName = fullName; chúng tôi = age; } public int getAge() { return age; } public String getFullName() { return fullName; } } package org.o7planning.tutorial.comparator; import java.util.Comparator; @Override public int compare(Person o1, Person o2) { if (o1 == null && o2 == null) { return 0; } if (o1 == null) { return -1; } if (o2 == null) { return 1; } int value = o1.getAge() - o2.getAge(); if (value != 0) { return value; } value = o1.getFullName().compareTo(o2.getFullName()); return value; } }

ComparatorSortingDemo.java

package org.o7planning.tutorial.comparator; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; public class ComparatorSortingDemo { public static void main(String[] args) { Person person1 = new Person("Marry", 20); Person person2 = new Person("Tom", 21); Person person3 = new Person("Daniel", 21); Person person4 = new Person("Mischa", 18); Person person5 = new Person("Christian", 20); Person[] array = new Person[] { person1, person2, person3, person4, person5 }; Arrays.sort(array, new PersonComparator()); for (Person person : array) { System.out.println("Person: " + person.getAge() + " / " + person.getFullName()); } list.add(person1); list.add(person2); list.add(person3); list.add(person4); list.add(person5); Collections.sort(list, new PersonComparator()); for (Person person : list) { System.out.println("Person: " + person.getAge() + " / " + person.getFullName()); } } }

So Sánh Chuỗi Trong Java

So sánh chuỗi trong java

Chúng ta có thể so sánh chuỗi trong java trên cơ sở nội dung và tham chiếu của nó.

Nó được sử dụng trong xác thực (bởi phương thức equals()), sắp xếp (theo phương thức compareTo()), so sánh tham chiếu(với toán tử ==), vv

Có ba cách để so sánh chuỗi trong java:

Sử dụng phương thức equals()

Sử dụng toán tử ==

Sử dụng phương thức compareTo()

1) So sánh chuỗi bằng phương thức equals()

Phương thức equals() được sử dụng để so sánh nội dung của 2 chuỗi. Lớp String cung cấp 2 phương thức equals():

public boolean equals(Object another): so sánh 2 chuỗi có phân biệt chữ hoa, chữ thường.

public boolean equalsIgnoreCase(String another): so sánh 2 chuỗi không phân biệt chữ hoa, chữ thường.

Ví dụ 1:

public class Teststringcomparison1 { public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; String s3 = new String("Hello"); String s4 = "Hallo"; System.out.println(s1.equals(s2));//true System.out.println(s1.equals(s3));//true System.out.println(s1.equals(s4));//false } }

Output:

Ví dụ 2:

public class Teststringcomparison2 { public static void main(String args[]) { String s1 = "Hello"; String s2 = "HELLO"; System.out.println(s1.equals(s2));//false System.out.println(s1.equalsIgnoreCase(s2));//true } }

Output:

2) So sánh chuỗi bằng toán tử ==

Toán tử == được sử dụng để so sánh tham chiếu (không phải giá trị) của 2 chuỗi.

Ví dụ 3:

public class Teststringcomparison3 { public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; String s3 = new String("Hello"); System.out.println(s1 == s2);//true (vì cả 2 cùng tham chiếu instance giống nhau) System.out.println(s1 == s3);//false(vì s3 tham chiếu instance mà không ở trong Pool) } }

Output:

3) So sánh chuỗi bằng phương thức compareTo()

Phương thức compareTo () so sánh các giá trị theo thứ tự từ điển và trả về một giá trị số nguyên mô tả nếu chuỗi đầu tiên nhỏ hơn, bằng hoặc lớn hơn chuỗi thứ hai.

Giả sử s1 và s2 là hai biến chuỗi. Nếu:

Ví dụ 4:

public static void main(String args[]) { String s1 = "Hello"; String s2 = "Hello"; String s3 = "Java"; System.out.println(s1.compareTo(s2)); System.out.println(s1.compareTo(s3)); System.out.println(s3.compareTo(s1)); }

Output:

So Sánh Đối Tượng Với Java

Thực hiện so sánh đối tượng với toán tử == và nạp chồng phương thức equals để so sánh hai đối tượng giống nhau về dữ liệu

So sánh đối tượng với Java

Cần phải nhớ rằng khi bạn tạo ra các đối tượng, biến lưu đối tượng là một tham chiếu tới đối tượng. Do vậy khi sử dụng toán tử so sánh bằng ==, nó sẽ sử dụng tham chiếu để so sánh chứ không sử dụng giá trị đối tượng so sánh.

class Animal { String name; Animal(String n) { name = n; } } class MyClass { public static void main(String[ ] args) { Animal a1 = new Animal("Robby"); Animal a2 = new Animal("Robby"); Animal a3 = a1; System.out.println(a1 == a2);//false System.out.println(a1 == a3);//true } } false true

Bạn thấy a1, a2 có dữ liệu name giống nhau nhưng so sánh là khác nhau vì nó sử dụng tham khảo a1 là một đối tượng khác với a2 (a1,a2 ở hai vị trí bộ nhớ khác nhau).

a1, a3 đều trỏ đến một địa chỉ bộ nhớ lên nó bằng nhau.

equals()

Mỗi đối tượng đều có một phương thức định nghĩa sẵn equals() được sử dụng để so sánh về dữ liệu. Để sử dụng nó với lớp, bạn cần nạp chồng và thi hành kiểm tra điều kiện bằng nhau hay không.

class Animal { String name; Animal(String n) { name = n; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Animal other = (Animal) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } class MyClass { public static void main(String[] args) { Animal a1 = new Animal("Robby"); Animal a2 = new Animal("Robby"); System.out.println(a1.equals(a2)); } }

Ví dụ trên đã thực sự so sánh dữ liệu đối tượng

Cách So Sánh Ngày Trong Java?

LocalDate today = LocalDate.now(ZoneId.of("America/Montreal")) ; Boolean isBetween = (! today.isBefore(localDate1))

Hoặc, tốt hơn, nếu bạn thêm ThreeTen-Extra thư viện để dự án của bạn.

LocalDateRange.of( LocalDate.of(...) , LocalDate.of(...) ).contains( LocalDate.now() )

nửa mở cách tiếp cận, nơi khởi đầu là bao gồm khi kết thúc là độc quyền.

Bằng cách này, đó là một sự lựa chọn xấu của định dạng cho phần trình bày văn bản của một ngày hoặc giá trị ngày tháng thời gian. Bất cứ khi nào có thể, hãy tuân theo các định dạng chuẩn ISO 8601. Các định dạng ISO 8601 rõ ràng, dễ hiểu trên các nền văn hóa của con người và dễ phân tích bằng máy.

Đối với giá trị chỉ ngày, định dạng chuẩn là YYYY-MM-DD. Lưu ý cách định dạng này có lợi ích khi được sắp xếp theo thứ tự thời gian khi được sắp xếp theo thứ tự bảng chữ cái.

Lớp đại diện cho một giá trị ngày tháng chỉ mà không cần thời gian của ngày và không có múi giờ.

Múi giờ rất quan trọng trong việc xác định ngày. Đối với bất kỳ thời điểm cụ thể nào, ngày thay đổi trên toàn cầu theo múi giờ. Ví dụ: một vài phút sau nửa đêm ở Paris France là một ngày mới trong khi vẫn “ngày hôm qua” trong Montréal Québec.

ZoneId z = ZoneId.of("America/Montreal"); LocalDate today = LocalDate.now(z);

Như chuỗi đầu vào của bạn là định dạng phi tiêu chuẩn, chúng ta phải xác định một mô hình định dạng để phù hợp.

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd-MM-uuuu");

Sử dụng để phân tích chuỗi đầu vào.

LocalDate start = LocalDate.parse("22-02-2010" , f); LocalDate stop = LocalDate.parse("25-12-2010" , f);

Trong tác phẩm ngày thời gian, thường là tốt nhất để xác định một khoảng thời gian bằng phương pháp nửa mở nơi đầu là bao gồm khi kết thúc là độc quyền. Vì vậy, chúng tôi muốn biết nếu hôm nay là như nhau hoặc muộn hơn bắt đầu và cũng trước khi dừng lại. Cách nói ngắn gọn là “giống hoặc muộn hơn bắt đầu” là “không phải trước khi bắt đầu”.

Boolean intervalContainsToday = (! today.isBefore(start)) && today.isBefore(stop) ;

Xem the Answer by gstackoverflow hiển thị danh sách các phương pháp so sánh bạn có thể gọi.

Khung chúng tôi được xây dựng vào Java 8 và sau đó. Các lớp này thay thế các lớp học ngày giờ legacy phiền hà cũ như java.util.Date, , & SimpleDateFormat.

Dự án Joda-Time, hiện đang ở maintenance mode, khuyên di chuyển đến các lớp java.time.

Để tìm hiểu thêm, hãy xem Oracle Tutorial. Và tìm kiếm Stack Overflow cho nhiều ví dụ và giải thích. Đặc điểm kỹ thuật là JSR 310.

Nơi lấy các lớp java.time?

câu trả lời khác là chính xác đối với các lớp chúng tôi và java.util.Calendar kèm với. Nhưng những lớp học đó nổi tiếng là rắc rối. Đây là một số mã ví dụ sử dụng thư viện Joda-Time 2.3.

Nếu bạn thực sự muốn có một ngày không có phần thời gian và không có múi giờ, hãy sử dụng lớp trong thời gian Joda. Lớp đó cung cấp các phương pháp so sánh bao gồm compareTo (được sử dụng với Java Comparators), isBefore, isAfter và isEqual.

Đầu vào …

String string1 = "22-02-2010"; String string2 = "07-04-2010"; String string3 = "25-12-2010";

Xác định một định dạng mô tả chuỗi đầu vào …

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MM-yyyy");

Sử dụng định dạng để phân tích các chuỗi vào LOCALDATE đối tượng …

LocalDate localDate1 = formatter.parseLocalDate(string1); LocalDate localDate2 = formatter.parseLocalDate(string2); LocalDate localDate3 = formatter.parseLocalDate(string3); boolean is1After2 = localDate1.isAfter(localDate2); boolean is2Before3 = localDate2.isBefore(localDate3);

Dump để an ủi …

System.out.println("Dates: " + localDate1 + " " + localDate2 + " " + localDate3); System.out.println("is1After2 " + is1After2); System.out.println("is2Before3 " + is2Before3);

Khi chạy …

Dates: 2010-02-22 2010-04-07 2010-12-25 is1After2 false is2Before3 true

Vì vậy, xem thứ hai là giữa hai người kia (độc quyền, có nghĩa là không bằng một trong hai thiết bị đầu cuối) …

boolean is2Between1And3 = ((localDate2.isAfter(localDate1)) && (localDate2.isBefore(localDate3)));

Nếu bạn đang làm việc với thời gian dài, tôi khuyên bạn nên khám phá trong Joda-Time các lớp học: Duration, Interval và Period. Các phương pháp như overlap và contains so sánh dễ dàng.

Đối với cơ quan đại diện văn bản, xem xét các tiêu chuẩn ISO 8601 của:

duration Format: PnYnMnDTnHnMnS Ví dụ: P3Y6M4DT12H30M5S (Có nghĩa là “ba năm, sáu tháng, bốn ngày, mười hai giờ, ba mươi phút, và lăm giây”)

interval Format: bắt đầu/kết thúc Ví dụ: 2007-03-01T13: 00: 00Z/2008-05-11T15: 30: 00Z

Các lớp thời gian Joda có thể hoạt động với các chuỗi trong cả hai định dạng đó, cả hai đều là đầu vào (phân tích cú pháp) và đầu ra (tạo chuỗi).

Joda Thời gian thực hiện so sánh bằng cách sử dụng cách tiếp cận nửa mở nơi đầu nhịp là bao gồm khi kết thúc là độc quyền. Cách tiếp cận này là một cách khôn ngoan để xử lý các khoảng thời gian. Tìm kiếm StackOverflow để biết thêm thông tin.

Cập nhật thông tin chi tiết về So Sánh Csharp Và Java trên website Channuoithuy.edu.vn. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Chúc bạn một ngày tốt lành!