JavaRush /Blog Java /Random-VI /Nghỉ giải lao #190. Cách chuyển đổi số nguyên thành chuỗi...

Nghỉ giải lao #190. Cách chuyển đổi số nguyên thành chuỗi. Các lớp bên trong tĩnh và không tĩnh trong Java

Xuất bản trong nhóm

Cách chuyển đổi số nguyên thành chuỗi

Nguồn: FreeCodeCamp Hướng dẫn này sẽ cho bạn biết một số cách để chuyển đổi số nguyên thành chuỗi. Nghỉ giải lao #190.  Cách chuyển đổi số nguyên thành chuỗi.  Các lớp bên trong tĩnh và không tĩnh trong Java - 1Để chuyển đổi các biến từ kiểu dữ liệu này sang kiểu dữ liệu khác, ngôn ngữ Java sử dụng nhiều phương thức khác nhau. Trong trường hợp chuyển đổi Integer thành String, bạn có thể sử dụng một trong các phương pháp sau:
  • Sử dụng phương thức Integer.toString() .
  • Sử dụng phương thức String.valueOf() .
  • Sử dụng phương thức String.format() .
  • Sử dụng lớp DecimalFormat .

Cách chuyển đổi một số nguyên thành một chuỗi trong Java bằng Integer.toString()

Phương thức Integer.toString() lấy một số nguyên để chuyển đổi làm tham số. Cú pháp ví dụ:
Integer.toString(INTEGER_VARIABLE)
Mã mẫu:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;
        String AGE_AS_STRING = Integer.toString(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}
Trong ví dụ này, chúng tôi đã tạo một số nguyên age và gán cho nó giá trị 2 . Để chuyển đổi biến age thành một chuỗi, chúng ta đã chuyển nó dưới dạng tham số cho phương thức Integer.toString() : Integer.toString(age) . Sau đó, chúng tôi lưu trữ giá trị chuỗi mới này trong một biến chuỗi có tên AGE_AS_STRING . Cuối cùng, chúng tôi kết hợp biến chuỗi mới với các chuỗi khác: "Đứa trẻ là " + AGE_AS_STRING + " tuổi" . Bây giờ câu hỏi là: liệu có xảy ra lỗi không nếu chúng ta chỉ nối biến tuổi với các chuỗi khác này mà không có bất kỳ chuyển đổi nào?
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        System.out.println("The child is " + age + " years old");
        // The child is 2 years old
    }
}
Kết quả đầu ra giống như trong ví dụ mà chúng ta cần chuyển đổi một số nguyên thành một chuỗi. Nhưng làm thế nào để chúng ta biết liệu việc chuyển đổi kiểu có thực sự hiệu quả hay không? Để làm điều này, chúng ta có thể kiểm tra các loại biến bằng đối tượng getClass() . Một cái gì đó như thế này:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = Integer.toString(age);


        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer

        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String
    }
}
Bây giờ chúng ta có thể xác minh rằng khi biến age được tạo , nó là một Integer và sau khi chuyển đổi kiểu, nó trở thành một String .

Cách chuyển đổi một số nguyên thành một chuỗi trong Java bằng String.valueOf()

Phương thức String.valueOf() cũng lấy biến cần chuyển đổi thành chuỗi làm tham số.
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = String.valueOf(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}
Đoạn mã trên tương tự như đoạn mã trong phần trước:
  1. Chúng tôi đã tạo một số nguyên gọi là age .
  2. Chúng ta đã chuyển số nguyên age làm tham số cho phương thức String.valueOf() : String.valueOf(age) .
Bây giờ bạn có thể kiểm tra xem việc chuyển đổi kiểu có hoạt động hay không bằng cách sử dụng đối tượng getClass() :
System.out.println(((Object)age).getClass().getSimpleName());
// Integer

System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String

Cách chuyển đổi một số nguyên thành một chuỗi trong Java bằng String.format()

Phương thức String.format() có hai tham số: một bộ xác định định dạng và biến được định dạng. Đây là một ví dụ:
class IntToStr {
    public static void main(String[] args) {

        int age = 2;

        String AGE_AS_STRING = String.format("%d", age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old

    }
}
Trong ví dụ này, chúng ta đã truyền hai tham số cho phương thức String.format() : "%d"age . "%d" là công cụ xác định định dạng cho biết biến được định dạng là số nguyên. age , là tham số thứ hai, sẽ được chuyển đổi thành chuỗi và được lưu trong biến AGE_AS_STRING . Bạn cũng có thể kiểm tra loại biến trước và sau khi chuyển đổi:
System.out.println(((Object)age).getClass().getSimpleName());
// Integer

System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String

Cách chuyển đổi số nguyên thành chuỗi trong Java bằng DecimalFormat

Lớp DecimalFormat được sử dụng để định dạng số thập phân trong Java. Nó có thể được sử dụng theo nhiều cách khác nhau, nhưng bây giờ chúng ta sẽ sử dụng nó để chuyển đổi một số nguyên thành một chuỗi. Đây là một ví dụ:
import java.text.DecimalFormat;

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

        int age = 2;

        DecimalFormat DFormat = new DecimalFormat("#");


        String AGE_AS_STRING = DFormat.format(age);

        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old


        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer

        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String

    }
}
Hãy nhìn vào mã này:
  1. Để có thể sử dụng lớp DecimalFormat trong một ví dụ cụ thể, chúng tôi đã nhập nó: import java.text.DecimalFormat; .
  2. Chúng tôi đã tạo một biến số nguyên age .
  3. Sau đó chúng tôi đã tạo một đối tượng DecimalFormat mới có tên là DFormat .
  4. Sử dụng phương thức format() của đối tượng , chúng ta đã chuyển đổi tuổi thành một chuỗi: DFormat.format(age); .

Phần kết luận

Trong bài viết này, chúng ta đã nói về việc chuyển đổi số nguyên thành chuỗi trong Java. Bạn đã xem các ví dụ về mã sử dụng ba phương thức khác nhau: Integer.toString() , String.valueOf() , String.format() và lớp DecimalFormat . Mỗi ví dụ hiển thị quá trình chuyển đổi và kiểm tra kiểu dữ liệu của biến trước và sau khi chuyển đổi.

Các lớp bên trong tĩnh và không tĩnh trong Java

Nguồn: Medium Với bài viết này, bạn sẽ tìm hiểu sự khác biệt giữa các lớp bên trong tĩnh và không tĩnh trong Java. Trong Java, các lớp bên trong không tĩnh (còn được gọi là lớp bên trong hoặc đối tượng bên trong) có một tham chiếu ngầm đến một thể hiện kèm theo của lớp bên ngoài. Điều này có nghĩa là họ có quyền truy cập vào các biến thể hiện và phương thức của lớp bên ngoài và có thể được sử dụng để tạo nhiều thể hiện của lớp bên trong được liên kết với các thể hiện khác nhau của lớp bên ngoài. Chúng ta hãy xem đoạn mã sau:
class Outer {
    private int x;
 class Inner {
        public void printX() {
            System.out.println(x);
        }
    }
}
Outer outer1 = new Outer();
outer1.x = 5;
Outer.Inner inner1 = outer1.new Inner();
inner1.printX(); // prints 5
Outer outer2 = new Outer();
outer2.x = 10;
Outer.Inner inner2 = outer2.new Inner();
inner2.printX(); // prints 10
Ở đây, lớp Outer có một lớp bên trong, Inner , có phương thức printX . Và đến lượt nó, nó in giá trị x từ phiên bản Outer xung quanh . Mã này tạo ra hai phiên bản Bên ngoài ( outer1external2 ) và hai phiên bản Bên trong ( inner1Inner2 ), mỗi phiên bản được liên kết với một phiên bản Outer khác nhau . Khi printX gọi Inner1Inner2 , nó sẽ in giá trị x từ phiên bản Outer tương ứng . Bởi vì các lớp bên trong không tĩnh có một tham chiếu ngầm đến phiên bản xung quanh nên chúng yêu cầu bộ nhớ bổ sung để lưu trữ tham chiếu này. Điều này có nghĩa là chúng kém hiệu quả về bộ nhớ hơn so với các lớp bên trong tĩnh, không có tham chiếu ngầm đến phiên bản kèm theo và không yêu cầu bộ nhớ bổ sung cho mục đích này. Mặt khác, các lớp tĩnh bên trong không thể truy cập các biến hoặc phương thức của lớp bên ngoài, do đó khả năng của chúng bị hạn chế. Chúng hữu ích khi bạn muốn định nghĩa một lớp có liên quan chặt chẽ với một lớp bên ngoài và không cần truy cập vào các biến thể hiện hoặc phương thức của nó. Các lớp bên trong không tĩnh (còn được gọi là lớp bên trong hoặc đối tượng bên trong) rất hữu ích khi bạn muốn định nghĩa một lớp có liên quan chặt chẽ với một lớp khác và có quyền truy cập vào các biến thể hiện và phương thức của lớp bên ngoài.

Sử dụng các lớp bên trong không tĩnh

Dưới đây là một số tình huống mà bạn có thể muốn sử dụng lớp bên trong không tĩnh:
  1. Khi lớp bên trong cần truy cập các biến thể hiện hoặc các phương thức của lớp bên ngoài không tĩnh . Bởi vì các lớp bên trong không tĩnh có một tham chiếu ngầm đến thể hiện xung quanh của lớp bên ngoài, nên chúng có thể truy cập trực tiếp vào các biến và phương thức của thể hiện không tĩnh.

  2. Khi bạn muốn xác định nhiều phiên bản của lớp bên trong được liên kết với các phiên bản khác nhau của lớp bên ngoài. Ví dụ: bạn có thể muốn tạo một lớp bên trong không tĩnh Button cho lớp Dialog , trong đó mỗi phiên bản Button được liên kết với một phiên bản Dialog khác và có thể truy cập các biến phiên bản và phương thức của phiên bản Dialog .

  3. Khi bạn muốn định nghĩa một lớp chỉ được sử dụng trong ngữ cảnh của lớp bên ngoài và không nhằm mục đích sử dụng độc lập. Các lớp bên trong không tĩnh chỉ có thể được truy cập từ lớp bên ngoài, vì vậy chúng được đóng gói nhiều hơn và ít bị sử dụng ngoài ý muốn hơn.

Sử dụng các lớp bên trong tĩnh

Chúng ta có thể sử dụng các lớp tĩnh bên trong nếu chúng ta không cần truy cập vào bất kỳ biến thể hiện hoặc phương thức nào của lớp bên ngoài và vì lý do này, chúng không cần phải có một tham chiếu ngầm đến thể hiện xung quanh của lớp bên ngoài. Điều này làm cho chúng có hiệu quả bộ nhớ cao hơn so với các lớp bên trong không tĩnh, có tham chiếu ngầm đến phiên bản xung quanh. Giả sử chúng ta cần thiết kế một biểu đồ chứa quỹ đạo (cạnh) và điểm giao nhau (nút). Các lớp NodeEdge có liên quan chặt chẽ với lớp Graph và chỉ được sử dụng trong ngữ cảnh của đối tượng Graph . Việc xác định chúng là các lớp bên trong tĩnh sẽ làm rõ rằng chúng là một phần của lớp Đồ thị và không nhằm mục đích sử dụng độc lập.
public class Graph {

    Map <String, Node> nodeMap;

    public Graph () {
        nodeMap = new HashMap<>();
    }

    static class Node {
        String name;
        List <Edge> edgeList;

        public Node(String name) {
            this.name = name;
            edgeList = new ArrayList();
        }
    }

    static class Edge {
        Node source;
        Node Destination;
        String type;

        public Edge(Node source, Node destination, String type) {
            this.Destination = destination;
            this.source = source;
            this.type = type;
        }
    }

}
Các lớp bên trong tĩnh không thể truy cập các biến thể hiện hoặc phương thức Dưới đây là một ví dụ minh họa thực tế rằng các lớp bên trong tĩnh không thể truy cập các biến thể hiện hoặc phương thức của lớp bên ngoài:
class Outer {
    private int x;
static class Inner {
        public void printX() {
            System.out.println(x);  // compilation error: cannot access x
        }
    }
}
Trong ví dụ này, lớp Outer có một biến thể hiện riêng tư x và một lớp bên trong tĩnh Inner . Lớp Inner có một phương thức printX cố gắng truy cập giá trị x từ phiên bản Outer xung quanh . Tuy nhiên, mã này sẽ không biên dịch vì các lớp tĩnh bên trong không thể truy cập các biến hoặc phương thức của lớp bên ngoài. Để truy cập các biến thể hiện hoặc phương thức của lớp bên ngoài từ lớp bên trong tĩnh, bạn có thể:
  1. Tạo các biến hoặc phương thức tĩnh . Điều này sẽ cho phép lớp bên trong tham chiếu đến chúng bằng tên lớp bên ngoài (ví dụ: Outer.x ).

  2. Truyền một thể hiện của lớp bên ngoài cho lớp bên trong và lưu trữ nó trong một trường. Sau đó, lớp bên trong có thể truy cập các biến thể hiện hoặc phương thức của lớp bên ngoài thông qua trường này.

Đây là một ví dụ cho thấy cách thực hiện việc này:
class Outer {
    private int x;
public void setX(int x) {
        this.x = x;
    }
    static class Inner {
        Outer outer;
        public Inner(Outer outer) {
            this.outer = outer;
        }
        public void printX() {
            System.out.println(outer.x);
        }
    }
}
Outer outer = new Outer();
outer.setX(5);
Outer.Inner inner = new Outer.Inner(outer);
inner.printX();  // prints 5
Trong ví dụ này, lớp Outer có một phương thức setX không tĩnh đặt giá trị của x và một lớp bên trong tĩnh Inner có trường bên ngoài thuộc loại Outer . Lớp Bên trong có một hàm tạo lấy một phiên bản Bên ngoài và lưu trữ nó ở trường bên ngoài . Sau đó, phương thức printX của lớp Inner có thể truy cập vào trường x của phiên bản bên ngoài bằng cách sử dụng ký hiệu external.x .
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION