Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使字符串私有或公共_Java_String_Private_Immutability_Public - Fatal编程技术网

在Java中使字符串私有或公共

在Java中使字符串私有或公共,java,string,private,immutability,public,Java,String,Private,Immutability,Public,Java中的字符串被认为是不可变的。 所以如果我说 String one = "myString"; 及 在内部,两个对象将使用相同的文本。 现在让我困惑的是,为什么我要在不同的类中使我的字符串私有化,而在内部它们将引用相同的字符串文本 只是外部元素(如类或对象)不知道类中有哪些成员吗?可见性和访问权限实际上只在编译期间存在,以检查您是否能够做到这一点或那一点,在运行时通常可以调用私有方法或通过不同的方法更改不可变数据 另一点:这些字符串是不可变的,因此您无法通过标准方法更改它们的值,因此它们

Java中的字符串被认为是不可变的。 所以如果我说

String one = "myString";

在内部,两个对象将使用相同的文本。 现在让我困惑的是,为什么我要在不同的类中使我的字符串私有化,而在内部它们将引用相同的字符串文本


只是外部元素(如类或对象)不知道类中有哪些成员吗?

可见性和访问权限实际上只在编译期间存在,以检查您是否能够做到这一点或那一点,在运行时通常可以调用私有方法或通过不同的方法更改不可变数据


另一点:这些字符串是不可变的,因此您无法通过标准方法更改它们的值,因此它们可以在内存中处于相同的位置,并且它与使用它们的类无关。可见性和访问权限实际上仅在编译期间存在,以检查您是否能够这样做,在运行时,您通常可以调用私有方法或通过不同的方法更改不可变数据


另一点:这些字符串是不可变的,因此您无法通过标准方法更改它们的值,因此它们可以在内存中处于相同的位置,并且无论哪个类将它们用于
字符串
引用,它实际上不会更改任何内容。这只是一个惯例和封装的问题。如果您的其他字段是私有的,并且有getter和setter,为什么您的
字符串不应该
字段(除非它是要隐藏的)

对于
String
引用,它实际上不会改变任何东西。这只是一个惯例和封装的问题。如果您的其他字段是私有的,并且有getter和setter,为什么您的
字符串不应该
字段(除非它是要隐藏的)

因为客户端可以将您的内部成员完全设置为其他内容。您可能混淆了
字符串
是不可变的,而引用是
final

假设你有这样一门课:

public class MyClass {
    public String first = "Test";
    public String second = "Test";
}
因此,作为Java编译器专家,我们知道内部
first
second
引用相同的对象。酷

现在,当我使用
MyClass
时:

MyClass myClass = new MyClass();
myClass.second = "Time to do some hackin'";
那太糟糕了。真的很糟糕

声明
String
成员
private
与失去编译器效率优势无关。它是关于类封装它的实现,这样它的客户端就不会与它紧密耦合,这样类就不必担心由于客户端不负责任的行为而导致的奇怪行为

对象“Test”是不可变的这一事实并不意味着我不能将
第一个
第二个
更改为指向其他对象


希望这会有所帮助。

因为客户端可以将您的内部成员完全设置为其他内容。您可能混淆了
字符串
是不可变的,而引用是
final

假设你有这样一门课:

public class MyClass {
    public String first = "Test";
    public String second = "Test";
}
因此,作为Java编译器专家,我们知道内部
first
second
引用相同的对象。酷

现在,当我使用
MyClass
时:

MyClass myClass = new MyClass();
myClass.second = "Time to do some hackin'";
那太糟糕了。真的很糟糕

声明
String
成员
private
与失去编译器效率优势无关。它是关于类封装它的实现,这样它的客户端就不会与它紧密耦合,这样类就不必担心由于客户端不负责任的行为而导致的奇怪行为

对象“Test”是不可变的这一事实并不意味着我不能将
第一个
第二个
更改为指向其他对象


希望有帮助。

使用private for String引用阻止外部对象的直接访问。但是setter和getter允许您访问/更改字符串变量(如果设置)。但是在setter方法中,您可以在更改值之前验证参数。这就是使用setter方法的主要优点


然后,假设两个对象中有两个相等的私有字符串变量。然后这两个引用应该指向字符串池中的一个位置。但听起来你们不能从一个对象访问两个字符串(因为你们总是使用受私有修饰符限制的引用变量)

使用private for String引用会阻止外部对象的直接访问。但是setter和getter允许您访问/更改字符串变量(如果设置)。但是在setter方法中,您可以在更改值之前验证参数。这就是使用setter方法的主要优点


然后,假设两个对象中有两个相等的私有字符串变量。然后这两个引用应该指向字符串池中的一个位置。但听起来你们不能从一个对象访问两个字符串(因为你们总是使用受私有修饰符限制的引用变量)

因为它们是不可变的,所以两个不同对象的两个成员是否指向同一个对象并不重要。但是为了防止任何人通过重新分配成员变量来更改对象的内部状态,这就是为什么要将其设置为私有。因为它们是不可变的,所以两个不同对象的两个成员是否指向同一个对象并不重要。但是为了防止任何人通过重新分配成员变量来更改对象的内部状态,这就是为什么将其设置为私有。如果我有public
getter
setter
,那么我还可以更改对其他对象的引用,那么私有的重要性是什么。既然它们在内部使用相同的字符串文字,为什么我要将它们设为私有?@Digvijay Yadiv您是开发人员,因此如果不想,您不必实现
setter
方法。您只需使用
get
方法即可访问它<代码>getter
setter
在p中是必需的