JavaRush /Java 博客 /Random-ZH /喝咖啡休息#190。如何将整数转换为字符串。Java中的静态和非静态内部类

喝咖啡休息#190。如何将整数转换为字符串。Java中的静态和非静态内部类

已在 Random-ZH 群组中发布

如何将整数转换为字符串

来源:FreeCodeCamp 本教程将告诉您几种将整数转换为字符串的方法。 喝咖啡休息#190。 如何将整数转换为字符串。 Java中的静态和非静态内部类 - 1为了将变量从一种数据类型转换为另一种数据类型,Java 语言使用各种方法。在将 Integer 转换为 String 的情况下,可以使用以下方法之一:
  • 使用Integer.toString()方法。
  • 使用String.valueOf()方法。
  • 使用String.format()方法。
  • 使用DecimalFormat类。

如何在 Java 中使用 Integer.toString() 将整数转换为字符串

Integer.toString()方法采用要转换的整数作为参数。语法示例:
Integer.toString(INTEGER_VARIABLE)
示例代码:
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
    }
}
在此示例中,我们创建了一个整数年龄并为其分配了值2。要将年龄变量转换为字符串,我们将其作为参数传递给Integer.toString() 方法: Integer.toString(age)然后,我们将这个新字符串值存储在名为AGE_AS_STRING的字符串变量中。最后,我们将新的字符串变量与其他字符串组合:"The child is " + AGE_AS_STRING + "years old"现在的问题是:如果我们只是将age变量与这些其他字符串连接起来而不进行任何转换, 会出现错误吗?
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
    }
}
输出与我们需要将整数转换为字符串的示例相同。但我们如何知道类型转换是否真正有效呢?为此,我们可以使用getClass()对象检查变量的类型。像这样的东西:
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
    }
}
现在我们可以验证一下,age变量在创建时是一个Integer,经过类型转换后它变成了一个String

如何在 Java 中使用 String.valueOf() 将整数转换为字符串

String.valueOf()方法还将要转换为字符串的变量作为参数。
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
    }
}
上面的代码与上一节的代码类似:
  1. 我们创建了一个名为age的整数。
  2. 我们将整数年龄作为参数传递给String.valueOf() 方法: String.valueOf(age)
现在您可以使用getClass()对象检查类型转换是否有效:
System.out.println(((Object)age).getClass().getSimpleName());
// Integer

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

如何在 Java 中使用 String.format() 将整数转换为字符串

String.format()方法采用两个参数:格式说明符和要格式化的变量。这是一个例子:
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

    }
}
在此示例中,我们向String.format()方法传递了两个参数: “%d”age“%d”是格式说明符,指示正在格式化的变量是整数。 第二个参数age将被转换为字符串并存储在AGE_AS_STRING变量中。您还可以检查转换前后变量的类型:
System.out.println(((Object)age).getClass().getSimpleName());
// Integer

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

如何在 Java 中使用 DecimalFormat 将整数转换为字符串

DecimalFormat类用于在 Java 中格式化十进制数。它可以以多种不同的方式使用,但现在我们将使用它将整数转换为字符串。这是一个例子:
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

    }
}
我们看一下这段代码:
  1. 为了能够在特定示例中使用DecimalFormat类,我们导入了它: import java.text.DecimalFormat;
  2. 我们创建了一个整数变量age
  3. 然后我们创建了一个名为DFormat的新DecimalFormat对象。
  4. 使用对象的format()方法,我们将年龄转换为字符串:DFormat.format(age);

结论

在本文中,我们讨论了在 Java 中将整数转换为字符串。您看到了使用三种不同方法的代码示例:Integer.toString()String.valueOf()String.format()DecimalFormat class 。每个示例都显示了转换过程以及转换前后变量的数据类型检查。

Java中的静态和非静态内部类

来源:Medium 通过本文,您将了解 Java 中静态内部类和非静态内部类之间的区别。 在 Java 中,非静态内部类(也称为内部类或内部对象)具有对外部类的封闭实例的隐式引用。这意味着它们可以访问外部类的实例变量和方法,并且可用于创建与外部类的不同实例关联的内部类的多个实例。我们看下面的代码:
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
这里, Outer 类有一个内部类Inner,它有一个printX方法。反过来,它从周围的Outer实例中打印值 x 。该代码创建两个外部实例(outer1outer2)和两个内部实例(inner1inner2 ),每个实例与不同的外部实例关联。当printX调用inner1inner2时,它会打印相应Outer实例中的值x 。由于非静态内部类具有对周围实例的隐式引用,因此它们需要额外的内存来存储此引用。这意味着它们的内存效率低于静态内部类,静态内部类没有对封闭实例的隐式引用,并且为此不需要额外的内存。另一方面,静态内部类无法访问外部类实例变量或方法,因此它们的功能受到限制。当您想要定义一个与外部类密切相关并且不需要访问其实例变量或方法的类时,它们非常有用。当您想要定义一个与另一个类密切相关并且可以访问外部类的实例变量和方法的类时,非静态内部类(也称为内部类或内部对象)非常有用。

使用非静态内部类

以下是您可能想要使用非静态内部类的几种情况:
  1. 当内部类需要访问外部类非static的实例变量或方法时。由于非静态内部类具有对外部类周围实例的隐式引用,因此它们可以直接访问非静态实例变量和方法。

  2. 当您想要定义与外部类的不同实例关联的内部类的多个实例时。例如,您可能想要为Dialog类创建一个非静态内部类Button,其中每个Button实例都与另一个Dialog实例关联,并且可以访问Dialog实例的实例变量和方法。

  3. 当您想要定义一个仅在外部类的上下文中使用且不打算独立使用的类时。非静态内部类只能从外部类访问,因此它们的封装性更强,不易被意外使用。

使用静态内部类

如果我们不需要访问外部类的任何实例变量或方法,则可以使用静态内部类,因此它们不需要对外部类的周围实例有隐式引用。这使得它们比非静态内部类具有更高的内存效率,非静态内部类具有对周围实例的隐式引用。假设我们需要设计一个包含轨迹(边)和交点(节点)的图。NodeEdge类与Graph类密切相关,并且仅在Graph对象的上下文中使用。将它们定义为静态内部类可以清楚地表明它们是Graph类的一部分,并且不打算独立使用。
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;
        }
    }

}
静态内部类不能访问外部类的实例变量或方法下面通过一个例子来说明静态内部类不能访问外部类的实例变量或方法:
class Outer {
    private int x;
static class Inner {
        public void printX() {
            System.out.println(x);  // compilation error: cannot access x
        }
    }
}
在此示例中,Outer类有一个私有实例变量x和一个静态内部类Inner内部类有一个printX方法,该方法尝试从周围的外部实例访问值x。但是,此代码将无法编译,因为静态内部类无法访问外部类实例变量或方法。要从静态内部类访问外部类的实例变量或方法,您可以:
  1. 创建静态实例变量或方法。这将允许内部类使用外部类名称(例如Outer.x)来引用它们。

  2. 将外部类的实例传递给内部类并将其存储在字段中。然后内部类可以通过该字段访问外部类的实例变量或方法。

下面的示例展示了如何执行此操作:
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
在此示例中, Outer 类具有一个用于设置x值的非静态setX方法,以及一个静态内部类Inner,其字段external类型为Outer。Inner 类有一个构造函数,它接受一个Outer实例并将其存储在外层字段中。然后,内部类的printX方法可以使用external.x notation访问外部实例的x字段。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION