Chuyển đổi chuỗi Java thành các loại giá trị khác. Chuyển đổi kiểu trong Java

Bài viết này:

  • do nhóm viết. Chúng tôi hy vọng rằng nó sẽ hữu ích cho bạn. Chúc bạn đọc vui vẻ!
  • đây là một trong những bài viết từ chúng tôi

Chuyển đổi kiểu là một chủ đề có vẻ khó khăn đối với những người mới làm quen với lập trình Java. Tuy nhiên, chúng tôi đảm bảo với bạn rằng mọi thứ thực sự đơn giản. Điều chính là phải hiểu quy luật nào chi phối sự tương tác giữa các biến và hãy nhớ điều này khi viết chương trình. Vì vậy, chúng ta hãy tìm ra nó.

Có 2 loại biến đổi trong Java - hình ảnh sẽ giúp bạn:

Hãy nhớ lại rằng toàn bộ “Vũ trụ Java” bao gồm:

  • các kiểu nguyên thủy (byte, short, int, long, char, float, double, boolean)
  • các đối tượng

Trong bài viết này chúng tôi:

  • xem xét chuyển đổi kiểu cho các kiểu biến nguyên thủy
  • việc chuyển đổi các đối tượng (Chuỗi, Máy quét, v.v.) không được xem xét trong bài viết này, vì một “ma thuật” riêng biệt xảy ra với các đối tượng - đây là chủ đề cho một bài viết riêng.
Chuyển đổi tự động

Chà, chúng ta hãy thử tìm hiểu "chuyển đổi tự động" là gì.

Hãy nhớ rằng, khi xem xét các loại biến (trong bài viết), chúng ta đã nói rằng một biến là một loại "vùng chứa" , có thể lưu trữ giá trị cho sử dụng thêm trong một chương trình. Chúng ta cũng đã nói về thực tế là mỗi loại biến có phạm vi riêng giá trị chấp nhận được và dung lượng bộ nhớ bị chiếm dụng. Đây là dấu hiệu nơi tất cả được viết ra:

Vì vậy, đây là những gì chúng tôi thực sự đang đạt được. Ngoài ra, không chỉ là bạn được cung cấp các phạm vi giá trị có thể chấp nhận được và dung lượng bộ nhớ bị chiếm dụng :)

Hãy so sánh, ví dụ:

1. byte và ngắn. byte có phạm vi giá trị hợp lệ nhỏ hơn short. Nghĩa là, byte giống như một hộp nhỏ hơn và short là hộp lớn hơn. Và điều đó có nghĩa chúng ta có thể đặt byte thành ngắn.

2. byte và int. byte có phạm vi giá trị hợp lệ nhỏ hơn int. Nghĩa là, byte giống như một hộp nhỏ hơn và int giống như một hộp lớn hơn. Và điều đó có nghĩa chúng ta có thể đặt byte vào int.

3. int và dài. int có phạm vi giá trị hợp lệ nhỏ hơn long. Nghĩa là, int giống như một chiếc hộp nhỏ hơn và long giống như một chiếc hộp lớn hơn. Và điều đó có nghĩa chúng ta có thể đưa int vào dài.

Đây là một ví dụ về chuyển đổi tự động. Điều này có thể được mô tả sơ đồ dưới dạng một bức tranh như thế này:

Chúng ta hãy xem cách này hoạt động trong thực tế.

Ví dụ số 1

Mã số 1 - nếu bạn chạy mã này trên máy tính của mình,

Kiểm tra lớp ( public static void main(String args) ( byte a = 15; byte b = a; System.out.println(b); ) )

Kiểm tra lớp(

byte a = 15;

byte b = a ;

Mã số 2 - nếu bạn chạy mã này trên máy tính của mình, số 15 sẽ được hiển thị trong bảng điều khiển

Kiểm tra lớp ( public static void main(String args) ( byte a = 15; int b = a; System.out.println(b); ) )

Kiểm tra lớp(

public static void main (String args) (

byte a = 15;

int b = a ;

Hệ thống. ngoài . println(b);

Eeyore? Bạn có nghĩ như thế số lần tương tự được xuất ra bảng điều khiển, và mã số 1 chỉ khác mã số 2 ở kiểu biến b , vậy thì không có sự khác biệt giữa chúng? EĐo không phải sự thật.

Mã số 2 chứa tự độngchuyển đổi kiểu , nhưng ở mã số 1 - không:

Mặc dù về nguyên tắc thì số này giống nhau nhưng hiện tại nó ở dạng b một thùng chứa lớn hơn chiếm nhiều dung lượng đĩa hơn. Trong trường hợp này, JVM thực hiện chuyển đổi tự động cho bạn. Cô ấy biết điều đó int nhiều hơn byte .

Dàn diễn viên

Sẽ là một vấn đề khác nếu bạn đang cố gắng chuyển một thứ gì đó từ thùng chứa lớn hơn sang thùng chứa nhỏ hơn.

Bạn có thể biết rằng thùng chứa lớn hơn chứa thứ gì đó có thể vừa với thùng nhỏ - nhưng JVM không biết về điều này và cố gắng bảo vệ bạn khỏi lỗi.

Vì vậy, bạn phải “nói rõ” rằng tình hình đã được kiểm soát:

Kiểm tra lớp ( public static void main(String args) ( int a=0; long b=15; a = (int) b; ) )

Kiểm tra lớp(

public static void main (String args) (

int a = 0 ;

dài b = 15 ;

a = (int) b;

Ở đây chúng tôi đã thêm (int) trước b. Nếu biến Một chẳng hạn như byte, trong ngoặc đơn sẽ là (byte). Công thức chung trông như thế này:

Cô ấy nói "làm cho (thêm) ý nghĩa b một biến thuộc loại tôi cần (mục tiêu) int ".

Nếu có gì đó không ổn.

Trước đó, chúng tôi tiếp cận các tình huống với giả định rằng chúng tôi biết chính xác mình đang làm gì. Nhưng điều gì sẽ xảy ra nếu bạn cố gắng bỏ thứ gì đó vào một thùng chứa không vừa với nó?

Hóa ra chỉ những gì “vừa vặn” trong đó mới được giữ lại trong thùng chứa. Ví dụ số dấu phẩy động sẽ bị “cắt bỏ” phân số:

//ví dụ 1 lớp Test ( public static void main(String args) ( double a=11.2345; int b=(int)a; System.out.println(b); // console sẽ hiển thị số 11 ) )

//ví dụ 1

Kiểm tra lớp(

public static void main (String args) (

gấp đôi a = 11,2345 ;

int b = (int ) a ;

Hệ thống. ngoài . println(b); // console sẽ hiển thị số 11

Chúng ta phải nhớ rằng phần phân số không tròn, MỘT bỏ đi.

Điều gì xảy ra nếu chúng ta cố gắng đặt một số nằm ngoài phạm vi cho phép? Ví dụ: nếu bạn đặt số 128 theo byte (phạm vi byte từ -128 đến 127)? Bạn có nghĩ chúng ta sẽ có được 1 không? KHÔNG. Chúng tôi nhận được -128:

class Test ( public static void main(String args) ( double a=128; byte b=(byte)a; System.out.println(b); //chúng ta sẽ thấy -128 trong bảng điều khiển) )

Giá trị của một biến có phép biến đổi như vậy có thể được tính toán, nhưng mục tiêu của người lập trình là ngăn chặn tình huống giá trị vượt quá giới hạn cho phép, vì điều này có thể dẫn đến hoạt động không chính xác của chương trình.

Nhiệm vụ:
  1. Viết liên tục vào trình biên dịch các chuyển đổi của tất cả các kiểu nguyên thủy với nhau, bao gồm cả char và các kiểu Tạo một bảng như thế này:
byte ngắn ký tự int dài trôi nổi gấp đôi boolean
byte
ngắn
ký tự
int
Dài
Trôi nổi
gấp đôi
boolean

Tại giao lộ, hãy viết: a - nếu việc chuyển đổi diễn ra tự động, bật - nếu bạn cần sử dụng một chuyển đổi rõ ràng, x - nếu việc chuyển đổi là không thể.

* truyền một kiểu cho chính nó được gọi giống hệt nhau- không cần thiết phải đăng ký

  1. Hãy xem lại kích thước của mỗi kiểu nguyên thủy. Cố gắng tạo một sơ đồ hiển thị loại nào sẽ đi đâu. Vẽ các mũi tên có nhãn “chuyển đổi mở rộng” và “chuyển đổi hạn chế”.
Câu hỏi

Trong cuộc phỏng vấn cho vị trí Nhà phát triển Java cấp dưới, bạn có thể được hỏi:

Bạn biết gì về việc chuyển đổi kiểu dữ liệu nguyên thủy, có mất dữ liệu không, có thể chuyển đổi kiểu boolean không?

Cố gắng trả lời câu hỏi.

Hãy tóm tắt:
  • Nếu bạn "đặt" nội dung của vùng chứa nhỏ hơn vào vùng chứa lớn hơn, quá trình chuyển đổi sẽ tự động diễn ra và không có lỗi nào xảy ra.
  • Nếu có nhu cầu đặt “một giá trị từ vùng chứa lớn hơn vào vùng chứa nhỏ hơn”, bạn cần phải cẩn thận và sử dụng kiểu truyền rõ ràng.
  • Khi truyền float hoặc double tới các loại tích phân, phần phân số không được làm tròn mà chỉ bị loại bỏ.
  • Loại boolean không thể chuyển thành bất kỳ loại nào.
  • Kiểu char được truyền tới các loại số, dưới dạng mã ký tự trong hệ thống UNICODE.
  • Nếu số lượng lớn hơn vật chứa nó thì kết quả sẽ khó lường.

Bài viết này chỉ mô tả một phần tài liệu về chủ đề đúc kiểu. Ngoài ra còn có các kiểu đối tượng, chuyển thành một chuỗi (xét cho cùng, mọi thứ đều có thể được viết trong một chuỗi, phải không?) và khuyến mãi tự động các loại trong biểu thức.

Chúng tôi hy vọng rằng bài viết của chúng tôi hữu ích cho bạn. Ngoài ra còn có cơ hội đăng ký các khóa học Java của chúng tôi ở Kyiv. Chúng tôi dạy từ đầu. Thông tin chi tiết Bạn có thể tìm thấy nó trên trang web của chúng tôi.


Mức độ gần đúng kiến thức cần thiết: Nhiệm vụ Cú pháp Java và một chút Java Core.

Khi kết thúc nhiệm vụ JavaRush đầu tiên, chúng ta tìm hiểu về chuyển đổi kiểu. Trong bài giảng cấp 10, các bạn có thể thấy rằng việc chuyển đổi một int thành String rất đơn giản và nói chung, hầu hết mọi kiểu nguyên thủy đều có thể được chuyển đổi thành String mà không gặp vấn đề gì. int x = 5 ; Chuỗi văn bản = "X=" + x; Ngoài ra, những người đã hoàn thành cấp độ 10 của nhiệm vụ Cú pháp Java đều biết rằng không thể chuyển đổi tham chiếu thành số thành tham chiếu thành chuỗi. Vậy cách tốt nhất để chuyển đổi một chuỗi thành số nguyên nguyên thủy là gì? Tốt hơn là thực hiện việc này bằng phương thức ParseInt của lớp Integer. Phương thức ParseInt phải chuyển đổi một Chuỗi thành int và ném ra ngoại lệ NumberFormatException nếu chuỗi không thể chuyển đổi thành kiểu int.

Ví dụ

Dòng cơ bản chuyển đổi một chuỗi thành số nguyên: int i = Integer. phân tích cú phápInt(myString); Nếu chuỗi được biểu thị bằng biến myString là một số nguyên hợp lệ, chẳng hạn như "1", "200", Java sẽ âm thầm chuyển đổi nó thành kiểu dữ liệu nguyên thủy int . Nếu vì lý do nào đó việc này không thành công thì việc làm như vậy có thể tạo ra Ngoại lệ NumberFormatException, vì vậy chúng ta cần thêm một chút mã để làm cho chương trình hoạt động chính xác với bất kỳ chuỗi nào. Một chương trình minh họa phương thức chuyển đổi Chuỗi Java thành int, quản lý một ngoại lệ NumberFormatException có thể xảy ra: public class JavaStringToIntExample ( public static void main (String args) ( // String s = "fred"; // sử dụng cái này nếu bạn cần kiểm tra // ngoại lệ bên dưới Chuỗi s = "100"; thử ( // đây là nơi String được chuyển đổi thành int int i = Số nguyên. ParseInt(s. Trim()); // hiển thị giá trị sau khi chuyển đổi Hệ thống. ngoài. println("int i = " + i) ; ) bắt (NumberFormatException nfe) ( System. out. println ("NumberFormatException: " + nfe. getMessage () ) ; ) )

Cuộc thảo luận

Khi nghiên cứu ví dụ trên, bạn sẽ thấy phương thức Integer.parseInt(s.trim()) được sử dụng để biến chuỗi s thành số nguyên i và điều này xảy ra trong hàng tiếp theo mã: int i = Số nguyên. ParseInt (s. Trim () ) Nhưng đôi khi việc chuyển đổi một chuỗi thành số sẽ không hoạt động. Trong ví dụ của chúng tôi, chuỗi như vậy có tên là fred. Chúng ta có thể nói về những mật mã trong đó các chữ cái được viết trên máy tính, nhưng nói một cách chính thức thì fred không phải là một con số và tốt hơn là nên để nó dưới dạng một chuỗi. Chương trình của chúng tôi được thiết kế sao cho khi cố gắng chuyển đổi "fred" thành một số, quy trình Integer parsInt sẽ đưa ra một ngoại lệ NumberFormatException mà bạn phải xử lý trong khối thử/bắt. Trong trường hợp này, bạn không nhất thiết phải sử dụng phương thức Trim() của lớp String, nhưng trong lập trình thực tế bạn nên sử dụng nó. Vì vậy, chúng tôi đã cho bạn thấy nó. Vì chủ đề này đã xuất hiện nên đây là một số “gợi ý” về chủ đề này. Các lớp chuỗi và số nguyên:
  • Integer.toString(int i) được sử dụng để chuyển đổi chuỗi int thành chuỗi Java.
  • Nếu bạn muốn chuyển đổi một đối tượng String thành một đối tượng Integer (chứ không phải lớp int nguyên thủy), hãy sử dụng phương thức valueOf() trên lớp Integer thay vì phương thức extractInt().
  • Nếu bạn cần chuyển đổi chuỗi thành các trường Java nguyên thủy bổ sung, hãy sử dụng các phương thức như Long.parseLong() và các phương thức tương tự.
Tác giả của câu trả lời: Alice Watson

Câu hỏi thường gặp về kiểu String/int trong Java: Làm cách nào để chuyển đổi kiểu String thành kiểu Int?

Giải pháp: Sử dụng phương thức lớp ParsInt Số nguyên Java. Phương thức ParseInt chuyển đổi kiểu String thành Int và ném ra ngoại lệ NumberFormatException nếu chuỗi không thể chuyển thành giá trị số nguyên.

Hãy xem xét hai ví dụ ngắn.

1. Ví dụ đơn giản về chuyển đổi “chuỗi thành số nguyên” trong Java

Bỏ qua ngoại lệ có thể xảy ra, mọi thứ cần thực hiện để chuyển đổi Chuỗi thành int đều khớp với một dòng mã:

int i = Integer.parseInt(myString);

Nếu chuỗi được biểu thị bằng myString là một số nguyên hợp lệ, chẳng hạn như “1”, “200”, v.v., thì chuỗi đó sẽ được chuyển thành kiểu int . Nếu chuyển đổi không thành công, NumberFormatException sẽ được ném ra. Vì vậy, mã của bạn cần dài hơn một chút để tính đến điều này, như trong ví dụ sau.

2. Ví dụ đầy đủ về chuyển đổi String thành int

Dưới là mã đầy đủ chương trình ví dụ. Nó trình bày quá trình chuyển đổi một chuỗi thành một số nguyên trong Java và xử lý một ngoại lệ NumberFormatException có thể xảy ra:

public class JavaStringToIntExample( public static void main (String args) ( // String s = "fred"; // Sử dụng dòng này để kiểm tra ngoại lệ String s = "100"; try ( // việc chuyển đổi String thành int được thực hiện tại đây int i = Integer.parseInt(s.trim());// in giá trị sau khi chuyển đổi System.out.println("int i = " + i); ) bắt (NumberFormatException nfe) ( System.out.println("NumberFormatException: " + nfe.getMessage()); ) ))

Giải trình

Trong ví dụ trên, phương thức Integer.parseInt(s.trim()) được sử dụng để dịch chuỗi s thành số nguyên i trong dòng mã sau:

int i = Integer.parseInt(s.trim());

Nếu nỗ lực chuyển đổi không thành công ( ví dụ: nếu bạn đang cố chuyển chuỗi fred thành một kiểu số nguyên), thì phương thức parsInt của lớp Integer sẽ ném ra ngoại lệ NumberFormatException, ngoại lệ này phải được xử lý trong khối try/catch.

Trong ví dụ này, bạn thực sự không cần sử dụng phương thức Trim() của lớp String. Nhưng trong chương trình thực tế nó sẽ cần thiết nên tôi đã áp dụng nó ở đây.

Ghi chú bổ sung

Trong khi chúng ta đang nói về chủ đề này, đây là một số lưu ý về các lớp Chuỗi và Số nguyên:

  • Phương thức Integer.toString(int i) được sử dụng để chuyển đổi từ kiểu int sang lớp Java String.
  • Để chuyển đổi một đối tượng String thành một đối tượng Integer, hãy sử dụng phương thức valueOf() của lớp Integer thay vì extractInt() .
  • Nếu bạn cần truyền chuỗi sang các kiểu Java nguyên thủy khác, chẳng hạn như dài, hãy sử dụng các phương thức Long.parseLong(), v.v.

Bản tóm tắt

Hy vọng ví dụ chuyển đổi String thành int trong Java này hữu ích. Nếu bạn có câu hỏi hoặc ý kiến, hãy để lại trong phần bình luận.

Bản dịch của bài viết “ Cách chuyển đổi chuỗi Java thành Int” đã được chuẩn bị bởi nhóm dự án thân thiện.

Tốt xấu

    Lớp Integer là nơi chứa kiểu dữ liệu int. Lớp này bao gồm các phương thức để chuyển đổi các giá trị từ một chuỗi thành một đối tượng Integer. Hướng dẫn này chứa...